[Checkins] SVN: zc.recipe.deployment/trunk/ Bugs fixed:

Jim Fulton jim at zope.com
Fri Mar 5 15:24:09 EST 2010


Log message for revision 109687:
  Bugs fixed:
  
  - Fixed a serious bug that cause buildouts to fail when using new
    versions of the deployment recipe with older buildouts.
  
  - Made uninstall more tolerant of directories it's about to delete
    already being deleted.
  

Changed:
  U   zc.recipe.deployment/trunk/README.txt
  U   zc.recipe.deployment/trunk/src/zc/recipe/deployment/README.txt
  U   zc.recipe.deployment/trunk/src/zc/recipe/deployment/__init__.py

-=-
Modified: zc.recipe.deployment/trunk/README.txt
===================================================================
--- zc.recipe.deployment/trunk/README.txt	2010-03-05 20:05:23 UTC (rev 109686)
+++ zc.recipe.deployment/trunk/README.txt	2010-03-05 20:24:09 UTC (rev 109687)
@@ -46,6 +46,18 @@
 Changes
 *******
 
+0.7.1 (2010-03-05)
+==================
+
+Bugs fixed
+----------
+
+- Fixed a serious bug that cause buildouts to fail when using new
+  versions of the deployment recipe with older buildouts.
+
+- Made uninstall more tolerant of directories it's about to delete
+  already being deleted.
+
 0.7.0 (2010-02-01)
 ==================
 

Modified: zc.recipe.deployment/trunk/src/zc/recipe/deployment/README.txt
===================================================================
--- zc.recipe.deployment/trunk/src/zc/recipe/deployment/README.txt	2010-03-05 20:05:23 UTC (rev 109686)
+++ zc.recipe.deployment/trunk/src/zc/recipe/deployment/README.txt	2010-03-05 20:24:09 UTC (rev 109687)
@@ -532,18 +532,35 @@
     '30 23 * * *\tbob\techo hello world!\n'
 
 
-.. cleanup
+.. edge case
 
-    >>> print system(join('bin', 'buildout')+' buildout:parts='),
+    uninstall with no stored prefix
+
+    >>> installed = [l for l in open('.installed.cfg')
+    ...              if not l.startswith('prefix =')]
+    >>> open('.installed.cfg', 'w').write(''.join(installed))
+
+    uninstall with some directories already gone:
+
+    >>> rmdir(sample_buildout, 'etc', 'bar')
+    >>> rmdir(sample_buildout, 'var', 'run')
+
+    >>> write('buildout.cfg',
+    ... '''
+    ... [buildout]
+    ... parts =
+    ... ''')
+
+    >>> print system(join('bin', 'buildout')), # doctest: +NORMALIZE_WHITESPACE
     Uninstalling cron.
     Uninstalling foo.
     Running uninstall recipe.
-    zc.recipe.deployment: Removing 'PREFIX/etc/bar'
-    zc.recipe.deployment: Removing 'PREFIX/etc/cron.d'.
-    zc.recipe.deployment: Removing 'PREFIX/etc/init.d'.
-    zc.recipe.deployment: Removing 'PREFIX/etc/logrotate.d'.
     zc.recipe.deployment: Removing 'PREFIX/var/log/bar'.
-    zc.recipe.deployment: Removing 'PREFIX/var/run/bar'.
 
+
+.. cleanup
+
+    >>> print system(join('bin', 'buildout')+' buildout:parts='),
+
     >>> os.path.exists(os.path.join(sample_buildout, 'etc/cron.d/bar-cron'))
     False

Modified: zc.recipe.deployment/trunk/src/zc/recipe/deployment/__init__.py
===================================================================
--- zc.recipe.deployment/trunk/src/zc/recipe/deployment/__init__.py	2010-03-05 20:05:23 UTC (rev 109686)
+++ zc.recipe.deployment/trunk/src/zc/recipe/deployment/__init__.py	2010-03-05 20:24:09 UTC (rev 109687)
@@ -81,18 +81,20 @@
 
 def uninstall(name, options):
     path = options['etc-directory']
-    shutil.rmtree(path)
-    logger.info("Removing %r", path)
+    if os.path.isdir(path):
+        shutil.rmtree(path)
+        logger.info("Removing %r", path)
     directories = ()
-    if options['prefix'] != '/':
+    if options.get('prefix', '/') != '/':
         directories = ('crontab', 'rc', 'logrotate')
     for d in directories + ('log', 'run'):
         path = options[d+'-directory']
-        if os.listdir(path):
-            logger.warn("Can't remove non-empty directory %r.", path)
-        else:
-            os.rmdir(path)
-            logger.info("Removing %r.", path)
+        if os.path.isdir(path):
+            if os.listdir(path):
+                logger.warn("Can't remove non-empty directory %r.", path)
+            else:
+                os.rmdir(path)
+                logger.info("Removing %r.", path)
 
 def make_dir(name, uid, gid, mode, created):
     uname = pwd.getpwuid(uid)[0]



More information about the checkins mailing list