[Erp5-report] r40396 jm - /erp5/trunk/products/ERP5Subversion/Tool/SubversionTool.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Thu Nov 18 19:49:30 CET 2010
Author: jm
Date: Thu Nov 18 19:49:29 2010
New Revision: 40396
URL: http://svn.erp5.org?rev=40396&view=rev
Log:
Fix BT export when svn working copy already contains files/dirs marked for deletion
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=40396&r1=40395&r2=40396&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Subversion/Tool/SubversionTool.py [utf8] (original)
+++ erp5/trunk/products/ERP5Subversion/Tool/SubversionTool.py [utf8] Thu Nov 18 19:49:29 2010
@@ -945,11 +945,12 @@ class SubversionTool(BaseTool):
Current directory must be the destination working copy
"""
- # Sets to track svn status in case it is not consistent with existing
+ client = self._getClient()
+ # Dicts 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('.')
+ versioned_dict = dict((x.getPath(), x) for x in client.status('.')
+ if x.getIsVersioned())
+ del versioned_dict['.']
added_set = set()
# Walk current tree
@@ -975,20 +976,23 @@ class SubversionTool(BaseTool):
dirpath = dirpath[prefix_length:]
for d in dirnames:
d = os.path.join(dirpath, d)
- if d in versioned_set:
- versioned_set.remove(d)
- else:
+ status = versioned_dict.pop(d, None)
+ if status is None:
added_set.add(d)
+ elif str(status.getTextStatus()) == 'deleted':
+ client.revert(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:
+ status = versioned_dict.pop(f, None)
+ if status is None:
added_set.add(f)
+ elif str(status.getTextStatus()) == 'deleted':
+ client.revert(f)
+ svn_file_set.add(f)
# copy file unless unchanged
file = open(os.path.join(path, f), 'rb')
try:
@@ -1011,8 +1015,8 @@ class SubversionTool(BaseTool):
file.close()
# Remove dangling files/dirs
- svn_file_set -= versioned_set # what is in versioned_set
- svn_dir_set -= versioned_set # is removed after
+ svn_file_set.difference_update(versioned_dict) # what is in versioned_dict
+ svn_dir_set.difference_update(versioned_dict) # is removed after
for x in svn_file_set:
if os.path.dirname(x) not in svn_dir_set:
os.remove(x)
@@ -1021,11 +1025,11 @@ class SubversionTool(BaseTool):
shutil.rmtree(x)
# Remove deleted files/dirs
- self.remove([x for x in versioned_set
- if os.path.dirname(x) not in versioned_set])
+ client.remove([x for x in versioned_dict
+ if os.path.dirname(x) not in versioned_dict])
# Add new files/dirs
- self.add([x for x in added_set
- if os.path.dirname(x) not in added_set])
+ client.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
More information about the Erp5-report
mailing list