#A. HISTORY OF THE SOFTWARE
#==========================

#Python was created in the early 1990s by Guido van Rossum at Stichting
#Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands
#as a successor of a language called ABC.  Guido remains Python's
#principal author, although it includes many contributions from others.

#In 1995, Guido continued his work on Python at the Corporation for
#National Research Initiatives (CNRI, see http://www.cnri.reston.va.us)
#in Reston, Virginia where he released several versions of the
#software.

#In May 2000, Guido and the Python core development team moved to
#BeOpen.com to form the BeOpen PythonLabs team.  In October of the same
#year, the PythonLabs team moved to Digital Creations (now Zope
#Corporation, see http://www.zope.com).  In 2001, the Python Software
#Foundation (PSF, see http://www.python.org/psf/) was formed, a
#non-profit organization created specifically to own Python-related
#Intellectual Property.  Zope Corporation is a sponsoring member of
#the PSF.

#All Python releases are Open Source (see http://www.opensource.org for
#the Open Source Definition).  Historically, most, but not all, Python
#releases have also been GPL-compatible; the table below summarizes
#the various releases.

    #Release         Derived     Year        Owner       GPL-
		    #from                                compatible? (1)

    #0.9.0 thru 1.2              1991-1995   CWI         yes
    #1.3 thru 1.5.2  1.2         1995-1999   CNRI        yes
    #1.6             1.5.2       2000        CNRI        no
    #2.0             1.6         2000        BeOpen.com  no
    #1.6.1           1.6         2001        CNRI        yes (2)
    #2.1             2.0+1.6.1   2001        PSF         no
    #2.0.1           2.0+1.6.1   2001        PSF         yes
    #2.1.1           2.1+2.0.1   2001        PSF         yes
    #2.2             2.1.1       2001        PSF         yes
    #2.1.2           2.1.1       2002        PSF         yes
    #2.1.3           2.1.2       2002        PSF         yes
    #2.2.1           2.2         2002        PSF         yes
    #2.2.2           2.2.1       2002        PSF         yes
    #2.2.3           2.2.2       2003        PSF         yes
    #2.3             2.2.2       2002-2003   PSF         yes
    #2.3.1           2.3         2002-2003   PSF         yes
    #2.3.2           2.3.1       2002-2003   PSF         yes
    #2.3.3           2.3.2       2002-2003   PSF         yes
    #2.3.4           2.3.3       2004        PSF         yes
    #2.3.5           2.3.4       2005        PSF         yes
    #2.4             2.3         2004        PSF         yes
    #2.4.1           2.4         2005        PSF         yes
    #2.4.2           2.4.1       2005        PSF         yes

#Footnotes:

#(1) GPL-compatible doesn't mean that we're distributing Python under
    #the GPL.  All Python licenses, unlike the GPL, let you distribute
    #a modified version without making your changes open source.  The
    #GPL-compatible licenses make it possible to combine Python with
    #other software that is released under the GPL; the others don't.

#(2) According to Richard Stallman, 1.6.1 is not GPL-compatible,
    #because its license has a choice of law clause.  According to
    #CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1
    #is "not incompatible" with the GPL.

#Thanks to the many outside volunteers who have worked under Guido's
#direction to make these releases possible.


#B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON
#===============================================================

#PSF LICENSE AGREEMENT FOR PYTHON 2.4
#------------------------------------

#1. This LICENSE AGREEMENT is between the Python Software Foundation
#("PSF"), and the Individual or Organization ("Licensee") accessing and
#otherwise using Python 2.4 software in source or binary form and its
#associated documentation.

#2. Subject to the terms and conditions of this License Agreement, PSF
#hereby grants Licensee a nonexclusive, royalty-free, world-wide
#license to reproduce, analyze, test, perform and/or display publicly,
#prepare derivative works, distribute, and otherwise use Python 2.4
#alone or in any derivative version, provided, however, that PSF's
#License Agreement and PSF's notice of copyright, i.e., "Copyright (c)
#2001, 2002, 2003, 2004 Python Software Foundation; All Rights Reserved"
#are retained in Python 2.4 alone or in any derivative version prepared
#by Licensee.

#3. In the event Licensee prepares a derivative work that is based on
#or incorporates Python 2.4 or any part thereof, and wants to make
#the derivative work available to others as provided herein, then
#Licensee hereby agrees to include in any such work a brief summary of
#the changes made to Python 2.4.

#4. PSF is making Python 2.4 available to Licensee on an "AS IS"
#basis.  PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
#IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
#DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
#FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 2.4 WILL NOT
#INFRINGE ANY THIRD PARTY RIGHTS.

#5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
#2.4 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
#A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 2.4,
#OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.

#6. This License Agreement will automatically terminate upon a material
#breach of its terms and conditions.

#7. Nothing in this License Agreement shall be deemed to create any
#relationship of agency, partnership, or joint venture between PSF and
#Licensee.  This License Agreement does not grant permission to use PSF
#trademarks or trade name in a trademark sense to endorse or promote
#products or services of Licensee, or any third party.

#8. By copying, installing or otherwise using Python 2.4, Licensee
#agrees to be bound by the terms and conditions of this License
#Agreement.


#BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
#-------------------------------------------

#BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1

#1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
#office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
#Individual or Organization ("Licensee") accessing and otherwise using
#this software in source or binary form and its associated
#documentation ("the Software").

#2. Subject to the terms and conditions of this BeOpen Python License
#Agreement, BeOpen hereby grants Licensee a non-exclusive,
#royalty-free, world-wide license to reproduce, analyze, test, perform
#and/or display publicly, prepare derivative works, distribute, and
#otherwise use the Software alone or in any derivative version,
#provided, however, that the BeOpen Python License is retained in the
#Software, alone or in any derivative version prepared by Licensee.

#3. BeOpen is making the Software available to Licensee on an "AS IS"
#basis.  BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
#IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
#DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
#FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
#INFRINGE ANY THIRD PARTY RIGHTS.

#4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
#SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
#AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
#DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.

#5. This License Agreement will automatically terminate upon a material
#breach of its terms and conditions.

#6. This License Agreement shall be governed by and interpreted in all
#respects by the law of the State of California, excluding conflict of
#law provisions.  Nothing in this License Agreement shall be deemed to
#create any relationship of agency, partnership, or joint venture
#between BeOpen and Licensee.  This License Agreement does not grant
#permission to use BeOpen trademarks or trade names in a trademark
#sense to endorse or promote products or services of Licensee, or any
#third party.  As an exception, the "BeOpen Python" logos available at
#http://www.pythonlabs.com/logos.html may be used according to the
#permissions granted on that web page.

#7. By copying, installing or otherwise using the software, Licensee
#agrees to be bound by the terms and conditions of this License
#Agreement.


#CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
#---------------------------------------

#1. This LICENSE AGREEMENT is between the Corporation for National
#Research Initiatives, having an office at 1895 Preston White Drive,
#Reston, VA 20191 ("CNRI"), and the Individual or Organization
#("Licensee") accessing and otherwise using Python 1.6.1 software in
#source or binary form and its associated documentation.

#2. Subject to the terms and conditions of this License Agreement, CNRI
#hereby grants Licensee a nonexclusive, royalty-free, world-wide
#license to reproduce, analyze, test, perform and/or display publicly,
#prepare derivative works, distribute, and otherwise use Python 1.6.1
#alone or in any derivative version, provided, however, that CNRI's
#License Agreement and CNRI's notice of copyright, i.e., "Copyright (c)
#1995-2001 Corporation for National Research Initiatives; All Rights
#Reserved" are retained in Python 1.6.1 alone or in any derivative
#version prepared by Licensee.  Alternately, in lieu of CNRI's License
#Agreement, Licensee may substitute the following text (omitting the
#quotes): "Python 1.6.1 is made available subject to the terms and
#conditions in CNRI's License Agreement.  This Agreement together with
#Python 1.6.1 may be located on the Internet using the following
#unique, persistent identifier (known as a handle): 1895.22/1013.  This
#Agreement may also be obtained from a proxy server on the Internet
#using the following URL: http://hdl.handle.net/1895.22/1013".

#3. In the event Licensee prepares a derivative work that is based on
#or incorporates Python 1.6.1 or any part thereof, and wants to make
#the derivative work available to others as provided herein, then
#Licensee hereby agrees to include in any such work a brief summary of
#the changes made to Python 1.6.1.

#4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS"
#basis.  CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
#IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
#DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
#FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT
#INFRINGE ANY THIRD PARTY RIGHTS.

#5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
#1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
#A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,
#OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.

#6. This License Agreement will automatically terminate upon a material
#breach of its terms and conditions.

#7. This License Agreement shall be governed by the federal
#intellectual property law of the United States, including without
#limitation the federal copyright law, and, to the extent such
#U.S. federal law does not apply, by the law of the Commonwealth of
#Virginia, excluding Virginia's conflict of law provisions.
#Notwithstanding the foregoing, with regard to derivative works based
#on Python 1.6.1 that incorporate non-separable material that was
#previously distributed under the GNU General Public License (GPL), the
#law of the Commonwealth of Virginia shall govern this License
#Agreement only as to issues arising under or with respect to
#Paragraphs 4, 5, and 7 of this License Agreement.  Nothing in this
#License Agreement shall be deemed to create any relationship of
#agency, partnership, or joint venture between CNRI and Licensee.  This
#License Agreement does not grant permission to use CNRI trademarks or
#trade name in a trademark sense to endorse or promote products or
#services of Licensee, or any third party.

#8. By clicking on the "ACCEPT" button where indicated, or by copying,
#installing or otherwise using Python 1.6.1, Licensee agrees to be
#bound by the terms and conditions of this License Agreement.

        #ACCEPT


#CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
#--------------------------------------------------

#Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
#The Netherlands.  All rights reserved.

#Permission to use, copy, modify, and distribute this software and its
#documentation for any purpose and without fee is hereby granted,
#provided that the above copyright notice appear in all copies and that
#both that copyright notice and this permission notice appear in
#supporting documentation, and that the name of Stichting Mathematisch
#Centrum or CWI not be used in advertising or publicity pertaining to
#distribution of the software without specific, written prior
#permission.

#STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
#THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
#FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
#FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
#WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
#ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
#OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

# Copyright (c) 2001, 2002, 2003, 2004 Python Software Foundation; All Rights Reserved
# Copyright (c) 2005 Nexedi SARL and Contributors. All Rights Reserved.

from dircache import listdir
import os

def cacheWalk(top, topdown=True, onerror=None):
  """Directory tree generator.

  modification of os.path.walk to use dircache.listdir
  instead of os.path.listdir
  """
  try:
    # Note that listdir and error are globals in this module due
    # to earlier import-*.
    names = listdir(top)
  except os.error, err:
    if onerror is not None:
      onerror(err)
    return

  dirs, nondirs = [], []
  for name in names:
    if os.path.isdir(os.path.join(top, name)):
      dirs.append(name)
    else:
      nondirs.append(name)

  if topdown:
    yield top, dirs, nondirs
  for name in dirs:
    path = os.path.join(top, name)
    if not os.path.islink(path):
      for elem in cacheWalk(path, topdown, onerror):
        yield elem
  if not topdown:
    yield top, dirs, nondirs