[Erp5-report] r6798 - /erp5/trunk/products/ERP5Subversion/Tool/SubversionTool.py

nobody at svn.erp5.org nobody at svn.erp5.org
Wed Apr 19 13:23:07 CEST 2006


Author: chris
Date: Wed Apr 19 13:23:05 2006
New Revision: 6798

URL: http://svn.erp5.org?rev=6798&view=rev
Log:
- fixed bug in svn add/del (order is important and wasn't taken into consideration)

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=6798&r1=6797&r2=6798&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Subversion/Tool/SubversionTool.py (original)
+++ erp5/trunk/products/ERP5Subversion/Tool/SubversionTool.py Wed Apr 19 13:23:05 2006
@@ -43,6 +43,7 @@
 from cStringIO import StringIO
 from tempfile import mktemp
 from shutil import copy
+from zLOG import LOG
 
 try:
   from base64 import b64encode, b64decode
@@ -757,8 +758,8 @@
     # Clean up
     removeAll(path)
 
-  # return a set with dirs & files present in the directory
-  def getSetForDir(self, directory):
+  # return a set with directories present in the directory
+  def getSetDirsForDir(self, directory):
     dir_set = set()
     for root, dirs, files in os.walk(directory):
       # don't visit SVN directories
@@ -768,41 +769,65 @@
       for name in dirs:
         f = os.path.join(root, name)
         dir_set.add(f.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 os.walk(directory):
+      # don't visit SVN directories
+      if '.svn' in dirs:
+        dirs.remove('.svn')
       # get Files
       for name in files: 
         f = os.path.join(root, name)
         dir_set.add(f.replace(directory,''))
     return dir_set
   
-  # return files/dirs present in new_dir but not in old_dir
+  # 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.getSetForDir(old_dir)
-    new_set = self.getSetForDir(new_dir)
+    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)
+    
   # svn del files that have been removed in new dir
   def deleteOldFiles(self, old_dir, new_dir, bt):
     # detect removed files
     files_set = self.getNewFiles(new_dir, old_dir)
+    # detect removed directories
+    dirs_set = self.getNewDirs(new_dir, old_dir)
     # svn del
-    for file in files_set:
-        self.remove(os.path.join(old_dir, file)) 
+    self.remove([os.path.join(old_dir, x) for x in files_set])
+    self.remove([os.path.join(old_dir, x) for x in dirs_set])
   
   # copy files and add new files
   def addNewFiles(self, old_dir, new_dir, bt):
     # detect created files
     files_set = self.getNewFiles(old_dir, new_dir)
+    # detect created directories
+    dirs_set = self.getNewDirs(old_dir, new_dir)
     # Copy files
     #os.system('cp -af %s/* %s'%(new_dir, old_dir))
     copytree(new_dir, old_dir)
     # svn add
-    for file in files_set:
-          self.add(os.path.join(old_dir, file))
+    self.add([os.path.join(old_dir, x) for x in dirs_set])
+    self.add([os.path.join(old_dir, x) for x in files_set])
   
   def treeToXML(self, item) :
     output = "<?xml version='1.0' encoding='iso-8859-1'?>"+ os.linesep




More information about the Erp5-report mailing list