[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