[Checkins] SVN: zc.buildout/branches/debug/src/zc/buildout/ checkpointing

Jim Fulton jim at zope.com
Wed Dec 6 07:38:17 EST 2006


Log message for revision 71434:
  checkpointing

Changed:
  U   zc.buildout/branches/debug/src/zc/buildout/buildout.py
  U   zc.buildout/branches/debug/src/zc/buildout/tests.py

-=-
Modified: zc.buildout/branches/debug/src/zc/buildout/buildout.py
===================================================================
--- zc.buildout/branches/debug/src/zc/buildout/buildout.py	2006-12-06 12:37:21 UTC (rev 71433)
+++ zc.buildout/branches/debug/src/zc/buildout/buildout.py	2006-12-06 12:38:17 UTC (rev 71434)
@@ -247,16 +247,18 @@
                     continue
 
                 # ununstall part
-                self._logger.info('Uninstalling %s', part)
+                self._logger.info('Uninstalling waaa %s', part)
 
                 # run uinstall recipe
                 recipe, entry = _recipe(installed_part_options[part])
+                print '?', recipe, entry
                 try:
-                    uninstaller = pkg_resources.load_entry_point(
-                        recipe, 'zc.buildout.uninstall', entry)
+                    uninstaller = _install_and_load(
+                        recipe, 'zc.buildout.ununstall', entry, self)
                     self._logger.info('Running uninstall recipe')
                     uninstaller(part, installed_part_options[part])
                 except (ImportError, pkg_resources.DistributionNotFound):
+                    print 'could not load'
                     # no uninstall recipe registered
                     pass
 
@@ -620,6 +622,32 @@
     def __iter__(self):
         return iter(self._raw)
 
+
+def _install_and_load(spec, group, entry, buildout):
+    req = pkg_resources.Requirement.parse(spec)
+
+    buildout_options = buildout['buildout']
+    if pkg_resources.working_set.find(req) is None:
+        if buildout_options['offline'] == 'true':
+            dest = None
+            path = [buildout_options['develop-eggs-directory'],
+                    buildout_options['eggs-directory'],
+                    ]
+        else:
+            dest = buildout_options['eggs-directory']
+            path = [buildout_options['develop-eggs-directory']]
+
+        zc.buildout.easy_install.install(
+            [spec], dest,
+            links=buildout._links,
+            index=buildout_options.get('index'),
+            path=path,
+            working_set=pkg_resources.working_set,
+            )
+
+    return pkg_resources.load_entry_point(
+        req.project_name, group, entry)
+
 class Options(UserDict.DictMixin):
 
     def __init__(self, buildout, section, data):
@@ -638,29 +666,8 @@
             return
         
         reqs, entry = _recipe(self._data)
-        req = pkg_resources.Requirement.parse(reqs)
         buildout = self.buildout
-        
-        if pkg_resources.working_set.find(req) is None:
-            offline = buildout['buildout']['offline'] == 'true'
-            if offline:
-                dest = None
-                path = [buildout['buildout']['develop-eggs-directory'],
-                        buildout['buildout']['eggs-directory'],
-                        ]
-            else:
-                dest = buildout['buildout']['eggs-directory']
-                path = [buildout['buildout']['develop-eggs-directory']]
-            zc.buildout.easy_install.install(
-                [reqs], dest,
-                links=buildout._links,
-                index=buildout['buildout'].get('index'),
-                path=path,
-                working_set=pkg_resources.working_set,
-                )
-            
-        recipe_class = pkg_resources.load_entry_point(
-            req.project_name, 'zc.buildout', entry)
+        recipe_class = _install_and_load(reqs, 'zc.buildout', entry, buildout)
 
         self.recipe = recipe_class(buildout, self.name, self)
         buildout._parts.append(self.name)

Modified: zc.buildout/branches/debug/src/zc/buildout/tests.py
===================================================================
--- zc.buildout/branches/debug/src/zc/buildout/tests.py	2006-12-06 12:37:21 UTC (rev 71433)
+++ zc.buildout/branches/debug/src/zc/buildout/tests.py	2006-12-06 12:38:17 UTC (rev 71434)
@@ -746,7 +746,70 @@
     define = X,Y
 
 """
+
+def uninstall_recipes_used_for_removal():
+    """
+Uninstall recipes need to be called when a part is removed too:
+
+    >>> mkdir("recipes")
+    >>> write("recipes", "setup.py",
+    ... '''
+    ... from setuptools import setup
+    ... setup(name='recipes',
+    ...       entry_points={
+    ...          'zc.buildout': ["demo=demo:Install"],
+    ...          'zc.buildout.uninstall': ["demo=demo:uninstall"],
+    ...          })
+    ... ''')
+
+    >>> write("recipes", "demo.py",
+    ... '''
+    ... class Install:
+    ...     def __init__(*args): pass
+    ...     def install(self):
+    ...         print 'installing'
+    ...         return ()
+    ... def uninstall(name, options): print 'uninstalling'
+    ... ''')
+
+    >>> write('buildout.cfg', '''
+    ... [buildout]
+    ... develop = recipes
+    ... parts = demo
+    ... [demo]
+    ... recipe = recipes:demo
+    ... ''')
+
+    >>> print system(join('bin', 'buildout')),
+    buildout: Develop: /tmp/tmpnTSVbq/_TEST_/sample-buildout/recipes
+    buildout: Installing demo
+    installing
+
+
+    >>> write('buildout.cfg', '''
+    ... [buildout]
+    ... develop = recipes
+    ... parts = demo
+    ... [demo]
+    ... recipe = recipes:demo
+    ... x = 1
+    ... ''')
+
+    >>> print system(join('bin', 'buildout')),
+
+
+    >>> write('buildout.cfg', '''
+    ... [buildout]
+    ... develop = recipes
+    ... parts = 
+    ... ''')
     
+
+    >>> print system(join('bin', 'buildout')),
+
+"""
+
+######################################################################
     
 def create_sample_eggs(test, executable=sys.executable):
     write = test.globs['write']



More information about the Checkins mailing list