From f1d6771be35e0ad6b3974d524d76573685d46195 Mon Sep 17 00:00:00 2001 From: jim <jim@62d5b8a3-27da-0310-9561-8e5933582275> Date: Tue, 24 Oct 2006 23:56:42 +0000 Subject: [PATCH] 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. git-svn-id: http://svn.zope.org/repos/main/zc.buildout/trunk@70907 62d5b8a3-27da-0310-9561-8e5933582275 --- CHANGES.txt | 12 +++++++++ setup.py | 2 +- src/zc/buildout/easy_install.py | 48 ++++++++++++++++++--------------- src/zc/buildout/tests.py | 42 ++++++++++++++++++++++++++--- 4 files changed, 79 insertions(+), 25 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 1ab1a39..d14e723 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -20,6 +20,18 @@ priorities include: 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) ===================== diff --git a/setup.py b/setup.py index 3ddeb96..35ed65b 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ def read(*rnames): name = "zc.buildout" setup( name = name, - version = "1.0.0b12", + version = "1.0.0b13", author = "Jim Fulton", author_email = "jim@zope.com", description = "System for managing development buildouts", diff --git a/src/zc/buildout/easy_install.py b/src/zc/buildout/easy_install.py index e139b30..4ce80ac 100644 --- a/src/zc/buildout/easy_install.py +++ b/src/zc/buildout/easy_install.py @@ -298,6 +298,27 @@ def _get_dist(requirement, env, ws, 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, @@ -330,25 +351,8 @@ def install(specs, dest, 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 @@ def install(specs, dest, [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 diff --git a/src/zc/buildout/tests.py b/src/zc/buildout/tests.py index a0b12e5..670d5a2 100644 --- a/src/zc/buildout/tests.py +++ b/src/zc/buildout/tests.py @@ -581,11 +581,9 @@ namespace packages. In this situation, package authors often forget to 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 @@ We do not get a warning, but we do get setuptools included in the working set: >>> 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): -- 2.30.9