[Erp5-report] r40326 jm - in /erp5/trunk/products: ERP5Subversion/Tool/ ERP5Type/patches/

nobody at svn.erp5.org nobody at svn.erp5.org
Wed Nov 17 11:10:24 CET 2010


Author: jm
Date: Wed Nov 17 11:10:24 2010
New Revision: 40326

URL: http://svn.erp5.org?rev=40326&view=rev
Log:
Speed up BT export to subversion working copy

Main optimization consists in reducing disk writes, by not using 'copytree'
anymore. Only modified/new files are copied from the temporary folder.

Also drop 'copyTree' and 'cacheWalk' because they are unused and 'dircache' is
deprecated.

Removed:
    erp5/trunk/products/ERP5Type/patches/cacheWalk.py
    erp5/trunk/products/ERP5Type/patches/copyTree.py
Modified:
    erp5/trunk/products/ERP5Subversion/Tool/SubversionTool.py

Modified: erp5/trunk/products/ERP5Subversion/Tool/SubversionTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Subversion/Tool/SubversionTool.py?rev=40326&r1=40325&r2=40326&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Subversion/Tool/SubversionTool.py [utf8] (original)
+++ erp5/trunk/products/ERP5Subversion/Tool/SubversionTool.py [utf8] Wed Nov 17 11:10:24 2010
@@ -46,8 +46,6 @@ import shutil
 from xml.sax.saxutils import escape
 from dircache import listdir
 from OFS.Traversable import NotFound
-from Products.ERP5Type.patches.copyTree import copytree, Error
-from Products.ERP5Type.patches.cacheWalk import cacheWalk
 import transaction
 
 try:
@@ -892,20 +890,19 @@ class SubversionTool(BaseTool):
     business_template.build()
     svn_path = self._getWorkingPath(self.getSubversionPath(business_template) \
     + os.sep)
+    old_cwd = os.getcwd()
     path = mkdtemp()
     try:
       # XXX: Big hack to make export work as expected.
       transaction.commit()
       business_template.export(path=path, local=1)
-      # svn del deleted files
-      self.deleteOldFiles(svn_path, path)
-      # add new files and copy
-      self.addNewFiles(svn_path, path)
       self.goToWorkingCopy(business_template)
+      self._reimportTree(path)
     finally:
       # Clean up
       shutil.rmtree(path)
-    
+      os.chdir(old_cwd)
+
   def importBT(self, business_template):
     """
      Import business template from local
@@ -927,88 +924,93 @@ class SubversionTool(BaseTool):
       res = [x for x in res if not x.startswith(path)]
     return res
 
-  # return a set with directories present in the directory
-  def getSetDirsForDir(self, directory):
-    dir_set = set()
-    for root, dirs, _ in cacheWalk(directory):
-      # don't visit SVN directories
-      if '.svn' in dirs:
-        dirs.remove('.svn')
-      # get Directories
-      for name in dirs:
-        i = root.replace(directory, '').count(os.sep)
-        path = os.path.join(root, name)
-        dir_set.add((i, path.replace(directory,'')))
-    return dir_set
-      
-  # return a set with files present in the directory
-  def getSetFilesForDir(self, directory):
-    dir_set = set()
-    for root, dirs, files in cacheWalk(directory):
-      # don't visit SVN directories
-      if '.svn' in dirs:
-        dirs.remove('.svn')
-      # get Files
-      for name in files:
-        i = root.replace(directory, '').count(os.sep)
-        path = os.path.join(root, name)
-        dir_set.add((i, path.replace(directory,'')))
-    return dir_set
-  
-  # return files present in new_dir but not in old_dir
-  # return a set of relative paths
-  def getNewFiles(self, old_dir, new_dir):
-    if old_dir[-1] != os.sep:
-      old_dir += os.sep
-    if new_dir[-1] != os.sep:
-      new_dir += os.sep
-    old_set = self.getSetFilesForDir(old_dir)
-    new_set = self.getSetFilesForDir(new_dir)
-    return new_set.difference(old_set)
-
-  # return dirs present in new_dir but not in old_dir
-  # return a set of relative paths
-  def getNewDirs(self, old_dir, new_dir):
-    if old_dir[-1] != os.sep:
-      old_dir += os.sep
-    if new_dir[-1] != os.sep:
-      new_dir += os.sep
-    old_set = self.getSetDirsForDir(old_dir)
-    new_set = self.getSetDirsForDir(new_dir)
-    return new_set.difference(old_set)
-    
-  def deleteOldFiles(self, old_dir, new_dir):
-    """ svn del files that have been removed in new dir
-    """
-    # detect removed files
-    files_set = self.getNewFiles(new_dir, old_dir)
-    # detect removed directories
-    dirs_set = self.getNewDirs(new_dir, old_dir)
-    # svn del
-    path_list = [x for x in files_set]
-    path_list.sort()
-    self.remove([os.path.join(old_dir, x[1]) for x in path_list])
-    path_list = [x for x in dirs_set]
-    path_list.sort()
-    self.remove([os.path.join(old_dir, x[1]) for x in path_list])
-  
-  def addNewFiles(self, old_dir, new_dir):
-    """ copy files and add new files
-    """
-    # detect created files
-    files_set = self.getNewFiles(old_dir, new_dir)
-    # detect created directories
-    dirs_set = self.getNewDirs(old_dir, new_dir)
-    # Copy files
-    copytree(new_dir, old_dir)
-    # svn add
-    path_list = [x for x in dirs_set]
-    path_list.sort()
-    self.add([os.path.join(old_dir, x[1]) for x in path_list])
-    path_list = [x for x in files_set]
-    path_list.sort()
-    self.add([os.path.join(old_dir, x[1]) for x in path_list])
-  
+  def _reimportTree(self, path):
+    """Overwrite working copy with the tree pointed to by 'path'
+
+    Current directory must be the destination working copy
+    """
+    # Sets to track svn status in case it is not consistent with existing
+    # files and directories
+    versioned_set = set(x.getPath() for x in self._getClient().status('.')
+                                    if x.getIsVersioned())
+    versioned_set.remove('.')
+    added_set = set()
+
+    # Walk current tree
+    svn_file_set = set()
+    svn_dir_set = set()
+    prefix_length = len(os.path.join('.', ''))
+    for dirpath, dirnames, filenames in os.walk('.'):
+      dirpath = dirpath[prefix_length:]
+      for i in xrange(len(dirnames) - 1, -1, -1):
+        d = dirnames[i]
+        if d[0] == '.':
+          # Ignore hidden directories (in particular '.svn')
+          del dirnames[i]
+        else:
+          svn_dir_set.add(os.path.join(dirpath, d))
+      for f in filenames:
+        svn_file_set.add(os.path.join(dirpath, f))
+
+    # Copy new files/dirs from 'path' to working copy
+    # Note: we don't use 'copytree' to avoid excessive disk writes
+    prefix_length = len(os.path.join(path, ''))
+    for dirpath, dirnames, filenames in os.walk(path):
+      dirpath = dirpath[prefix_length:]
+      for d in dirnames:
+        d = os.path.join(dirpath, d)
+        if d in versioned_set:
+          versioned_set.remove(d)
+        else:
+          added_set.add(d)
+        if d in svn_dir_set:
+          svn_dir_set.remove(d)
+        else:
+          os.mkdir(d)
+      for f in filenames:
+        f = os.path.join(dirpath, f)
+        if f in versioned_set:
+          versioned_set.remove(f)
+        else:
+          added_set.add(f)
+        # copy file unless unchanged
+        file = open(os.path.join(path, f), 'rb')
+        try:
+          text = file.read()
+        finally:
+          file.close()
+        try:
+          if f in svn_file_set:
+            svn_file_set.remove(f)
+            file = open(f, 'r+b')
+            old_size = os.fstat(file.fileno()).st_size
+            if len(text) == old_size and text == file.read():
+              continue
+            file.seek(0)
+          else:
+            file = open(f, 'wb')
+          file.write(text)
+          file.truncate()
+        finally:
+          file.close()
+
+    # Remove dangling files/dirs
+    svn_file_set -= versioned_set # what is in versioned_set
+    svn_dir_set -= versioned_set  #  is removed after
+    for x in svn_file_set:
+      if os.path.dirname(x) not in svn_dir_set:
+        os.remove(x)
+    for x in svn_dir_set:
+      if os.path.dirname(x) not in svn_dir_set:
+        shutil.rmtree(x)
+
+    # Remove deleted files/dirs
+    self.remove([x for x in versioned_set
+                   if os.path.dirname(x) not in versioned_set])
+    # Add new files/dirs
+    self.add([x for x in added_set
+                if os.path.dirname(x) not in added_set])
+
   def treeToXML(self, item, business_template) :
     """ Convert tree in memory to XML
     """

Removed: erp5/trunk/products/ERP5Type/patches/cacheWalk.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/patches/cacheWalk.py?rev=40325&view=auto
==============================================================================
--- erp5/trunk/products/ERP5Type/patches/cacheWalk.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/patches/cacheWalk.py (removed)
@@ -1,305 +0,0 @@
-#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

Removed: erp5/trunk/products/ERP5Type/patches/copyTree.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/patches/copyTree.py?rev=40325&view=auto
==============================================================================
--- erp5/trunk/products/ERP5Type/patches/copyTree.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/patches/copyTree.py (removed)
@@ -1,313 +0,0 @@
-#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
-from shutil import copy
-import os, exceptions
-
-class Error(exceptions.EnvironmentError):
-  """ Simple Exception
-  """
-  pass
-
-def copytree(src, dst, symlinks=False):
-  """Recursively copy a directory tree using copy().
-
-  If exception(s) occur, an Error is raised with a list of reasons.
-  dst dir must exist
-
-  If the optional symlinks flag is true, symbolic links in the
-  source tree result in symbolic links in the destination tree; if
-  it is false, the contents of the files pointed to by symbolic
-  links are copied.
-  
-  Modified version of shutil.copytree that do not require
-  destination folder to exist.
-  """
-  names = listdir(src)
-  errors = []
-  for name in names:
-    srcname = os.path.join(src, name)
-    dstname = os.path.join(dst, name)
-    try:
-      if symlinks and os.path.islink(srcname):
-        linkto = os.readlink(srcname)
-        os.symlink(linkto, dstname)
-      elif os.path.isdir(srcname):
-        if not os.path.exists(dstname):
-          os.makedirs(dstname)
-        copytree(srcname, dstname, symlinks)
-      else:
-        copy(srcname, dstname)
-    except (IOError, os.error), why:
-      errors.append((srcname, dstname, str(why)))
-  if errors:
-    raise Error, errors




More information about the Erp5-report mailing list