[Erp5-report] r40065 jm - in /erp5/trunk/products/ERP5Subversion: ./ Tool/

nobody at svn.erp5.org nobody at svn.erp5.org
Mon Nov 8 18:18:12 CET 2010


Author: jm
Date: Mon Nov  8 18:18:11 2010
New Revision: 40065

URL: http://svn.erp5.org?rev=40065&view=rev
Log:
ERP5Subversion: fix cleanup of temporary directories

Modified:
    erp5/trunk/products/ERP5Subversion/SubversionClient.py
    erp5/trunk/products/ERP5Subversion/Tool/SubversionTool.py

Modified: erp5/trunk/products/ERP5Subversion/SubversionClient.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Subversion/SubversionClient.py?rev=40065&r1=40064&r2=40065&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Subversion/SubversionClient.py [utf8] (original)
+++ erp5/trunk/products/ERP5Subversion/SubversionClient.py [utf8] Mon Nov  8 18:18:11 2010
@@ -36,11 +36,30 @@ import sys
 from Products.ERP5Type.Utils import convertToUpperCase
 from MethodObject import Method
 from Products.ERP5Type.Globals import InitializeClass
+from Products.ERP5Type.TransactionalVariable import getTransactionalVariable
 from AccessControl import ClassSecurityInfo
 from Products.PythonScripts.Utility import allow_class
-from tempfile import mktemp
+from tempfile import mkdtemp
 import shutil
 
+
+class getTransactionalDirectory(str):
+  """Returns a temporary directory that is automatically deleted when
+     transaction ends
+  """
+  def __new__(cls, tv_key):
+    tv = getTransactionalVariable()
+    try:
+      return str(tv[tv_key])
+    except KeyError:
+      path = mkdtemp()
+      tv[tv_key] = str.__new__(cls, path)
+      return path
+
+  def __del__(self):
+    shutil.rmtree(str(self))
+
+
 class SubversionError(Exception):
   """The base exception class for the Subversion interface.
   """
@@ -284,25 +303,14 @@ try:
       status_list.reverse()
       return status_list
     
-    def removeAllInList(self, path_list):
-      """Remove all files and folders in list
-      """
-      for file_path in path_list:
-        shutil.rmtree(file_path)
-      
     def diff(self, path, revision1, revision2):
-      tmp = mktemp()
-      os.makedirs(tmp)
-      if not revision1 or not revision2:
-        diff = self.client.diff(tmp_path=tmp, url_or_path=path, recurse=False)
+      tmp_path = getTransactionalDirectory('SubversionClient.diff:tmp_dir')
+      if revision1 and revision2:
+        return self.client.diff(tmp_path, url_or_path=path, recurse=False,
+          revision1=pysvn.Revision(pysvn.opt_revision_kind.number,revision1),
+          revision2=pysvn.Revision(pysvn.opt_revision_kind.number,revision2))
       else:
-        diff = self.client.diff(tmp_path=tmp, url_or_path=path, \
-        recurse=False, revision1 = pysvn.Revision(pysvn.opt_revision_kind\
-        .number,revision1), revision2=pysvn.Revision(pysvn\
-        .opt_revision_kind.number,revision2))
-      # clean up temp dir
-      self.activate().removeAllInList([tmp, ])
-      return diff
+        return self.client.diff(tmp_path, url_or_path=path, recurse=False)
     
     def revert(self, path, recurse=False):
       try:

Modified: erp5/trunk/products/ERP5Subversion/Tool/SubversionTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Subversion/Tool/SubversionTool.py?rev=40065&r1=40064&r2=40065&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Subversion/Tool/SubversionTool.py [utf8] (original)
+++ erp5/trunk/products/ERP5Subversion/Tool/SubversionTool.py [utf8] Mon Nov  8 18:18:11 2010
@@ -40,7 +40,7 @@ import os, re
 from DateTime import DateTime
 from cPickle import dumps, loads
 from App.config import getConfiguration
-from tempfile import gettempdir, mktemp
+from tempfile import gettempdir, mkdtemp
 from Products.CMFCore.utils import getToolByName
 import shutil
 from xml.sax.saxutils import escape
@@ -869,7 +869,7 @@ class SubversionTool(BaseTool):
           # add new file to the tree
           parent.sub_files.append(File(filename, str(status)))
     return something_modified and root
-  
+
   def extractBT(self, business_template):
     """ 
      Extract business template to hard drive
@@ -881,7 +881,7 @@ class SubversionTool(BaseTool):
     business_template.build()
     svn_path = self._getWorkingPath(self.getSubversionPath(business_template) \
     + os.sep)
-    path = mktemp() + os.sep
+    path = mkdtemp()
     try:
       # XXX: Big hack to make export work as expected.
       transaction.commit()
@@ -891,13 +891,9 @@ class SubversionTool(BaseTool):
       # add new files and copy
       self.addNewFiles(svn_path, path)
       self.goToWorkingCopy(business_template)
-    except (pysvn.ClientError, NotFound, AttributeError, \
-    Error), error:
+    finally:
       # Clean up
       shutil.rmtree(path)
-      raise error
-    # Clean up
-    self.activate().removeAllInList([path, ])
     
   def importBT(self, business_template):
     """




More information about the Erp5-report mailing list