[Checkins] SVN: zc.buildout/trunk/ Bugs Fixed

Jim Fulton jim at zope.com
Tue Oct 24 19:56:42 EDT 2006


Log message for revision 70907:
  Bugs Fixed
  ----------
  
  - We treat setuptools as a dependency of any distribution that
    (declares that it) uses namespace packages, whether it declares
    setuptools as a dependency or not.  This wasn't working for eggs
    intalled by virtue of being dependencies.
  

Changed:
  U   zc.buildout/trunk/CHANGES.txt
  U   zc.buildout/trunk/setup.py
  U   zc.buildout/trunk/src/zc/buildout/easy_install.py
  U   zc.buildout/trunk/src/zc/buildout/tests.py

-=-
Modified: zc.buildout/trunk/CHANGES.txt
===================================================================
--- zc.buildout/trunk/CHANGES.txt	2006-10-24 23:31:47 UTC (rev 70906)
+++ zc.buildout/trunk/CHANGES.txt	2006-10-24 23:56:42 UTC (rev 70907)
@@ -20,6 +20,18 @@
 Change History
 **************
 
+1.0.0b12 (2006-10-?)
+=====================
+
+Bugs Fixed
+----------
+
+- We treat setuptools as a dependency of any distribution that
+  (declares that it) uses namespace packages, whether it declares
+  setuptools as a dependency or not.  This wasn't working for eggs
+  intalled by virtue of being dependencies.
+
+
 1.0.0b12 (2006-10-24)
 =====================
 

Modified: zc.buildout/trunk/setup.py
===================================================================
--- zc.buildout/trunk/setup.py	2006-10-24 23:31:47 UTC (rev 70906)
+++ zc.buildout/trunk/setup.py	2006-10-24 23:56:42 UTC (rev 70907)
@@ -7,7 +7,7 @@
 name = "zc.buildout"
 setup(
     name = name,
-    version = "1.0.0b12",
+    version = "1.0.0b13",
     author = "Jim Fulton",
     author_email = "jim at zope.com",
     description = "System for managing development buildouts",

Modified: zc.buildout/trunk/src/zc/buildout/easy_install.py
===================================================================
--- zc.buildout/trunk/src/zc/buildout/easy_install.py	2006-10-24 23:31:47 UTC (rev 70906)
+++ zc.buildout/trunk/src/zc/buildout/easy_install.py	2006-10-24 23:56:42 UTC (rev 70907)
@@ -298,7 +298,28 @@
                 links.append(link)
                 
     return dist
+
+def _maybe_add_setuptools(ws, dist, env, dest, links, index, executable):
+    if dist.has_metadata('namespace_packages.txt'):
+        for r in dist.requires():
+            if r.project_name == 'setuptools':
+                break
+        else:
+            # We have a namespace package but no requirement for setuptools
+            if dist.precedence == pkg_resources.DEVELOP_DIST:
+                logger.warn(
+                    "Develop distribution for %s\n"
+                    "uses namespace packages but the distribution "
+                    "does not require setuptools.",
+                    dist)
+            requirement = pkg_resources.Requirement.parse('setuptools')
+            if ws.find(requirement) is None:
+                dist = _get_dist(requirement, env, ws,
+                                 dest, links, index, executable,
+                                 False)
+                ws.add(dist)
     
+    
 def install(specs, dest,
             links=(), index=None,
             executable=sys.executable, always_unzip=False,
@@ -330,25 +351,8 @@
         dist = _get_dist(requirement, env, ws,
                          dest, links, index, executable, always_unzip)
         ws.add(dist)
-        if dist.has_metadata('namespace_packages.txt'):
-            for r in dist.requires():
-                if r.project_name == 'setuptools':
-                    break
-            else:
-                # We have a namespace package but no requirement for setuptools
-                if dist.precedence == pkg_resources.DEVELOP_DIST:
-                    logger.warn(
-                        "Develop distribution for %s\n"
-                        "uses namespace packages but the distribution "
-                        "does not require setuptools.",
-                        dist)
-                requirement = pkg_resources.Requirement.parse('setuptools')
-                if ws.find(requirement) is None:
-                    dist = _get_dist(requirement, env, ws,
-                                     dest, links, index, executable,
-                                     False)
-                    ws.add(dist)
-                    
+        _maybe_add_setuptools(ws, dist,
+                              env, dest, links, index, executable)
 
     # OK, we have the requested distributions and they're in the working
     # set, but they may have unmet requirements.  We'll simply keep
@@ -365,9 +369,11 @@
             [requirement] = err
             if dest:
                 logger.debug('Getting required %s', requirement)
-            ws.add(_get_dist(requirement, env, ws,
+            dist = _get_dist(requirement, env, ws,
                              dest, links, index, executable, always_unzip)
-                   )
+            ws.add(dist)
+            _maybe_add_setuptools(ws, dist,
+                                  env, dest, links, index, executable)
         else:
             break
             

Modified: zc.buildout/trunk/src/zc/buildout/tests.py
===================================================================
--- zc.buildout/trunk/src/zc/buildout/tests.py	2006-10-24 23:31:47 UTC (rev 70906)
+++ zc.buildout/trunk/src/zc/buildout/tests.py	2006-10-24 23:56:42 UTC (rev 70907)
@@ -581,11 +581,9 @@
 declare setuptools as a dependency. This is a mistake, but,
 unfortunately, a common one that we need to work around.  If an egg
 uses namespace packages and does not include setuptools as a depenency,
-we willll still include setuptools in the working set.  If we see this for
+we will still include setuptools in the working set.  If we see this for
 a devlop egg, we will also generate a warning.
 
-    >>> cd(sample_buildout)
-
     >>> mkdir('foo')
     >>> mkdir('foo', 'src')
     >>> mkdir('foo', 'src', 'stuff')
@@ -664,8 +662,46 @@
 
     >>> print handler,
 
+We get the same behavior if the it is a depedency that uses a
+namespace package.
+
+
+    >>> mkdir('bar')
+    >>> write('bar', 'setup.py',
+    ... """
+    ... from setuptools import setup
+    ... setup(name='bar', install_requires = ['foox'])
+    ... """)
+    >>> write('bar', 'README.txt', '')
+    
+    >>> write('buildout.cfg',
+    ... """
+    ... [buildout]
+    ... develop = foo bar
+    ... parts = 
+    ... """)
+
+    >>> print system(join('bin', 'buildout')),
+    buildout: Develop: /sample-buildout/foo/setup.py
+    buildout: Develop: /sample-buildout/bar/setup.py
+
+    >>> [dist.project_name
+    ...  for dist in zc.buildout.easy_install.working_set(
+    ...    ['bar'], sys.executable,
+    ...    [join(sample_buildout, 'eggs'),
+    ...     join(sample_buildout, 'develop-eggs'),
+    ...     ])]
+    ['bar', 'foox', 'setuptools']
+
+    >>> print handler,
+    zc.buildout.easy_install WARNING
+      Develop distribution for foox 0.0.0
+    uses namespace packages but the distribution does not require setuptools.
+
+
     >>> logging.getLogger('zc').propagate = True
     >>> handler.uninstall()
+
     '''
     
 def create_sample_eggs(test, executable=sys.executable):



More information about the Checkins mailing list