summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReinout van Rees <reinout@vanrees.org>2009-10-14 14:39:55 +0200
committerReinout van Rees <reinout@vanrees.org>2009-10-14 14:39:55 +0200
commitdd2b4ffb2f582bf8270c0ceed490bf035a9e553b (patch)
treed36166d4eaf3131aa1d204c81ad6335e535a038f
parentf0daab74fc160d92ff534af1097c892140f6a46b (diff)
downloadpython-setuptools-git-dd2b4ffb2f582bf8270c0ceed490bf035a9e553b.tar.gz
Distribute no longer shadows setuptools if we require a 0.7-series
setuptools. Added _override_setuptools() checker method and calling it in two places that checks whether we request a setuptools from the 0.7 series. Including test. --HG-- branch : distribute extra : rebase_source : 51c89e02721de2e31c9392d1ead76ac1e828810c
-rw-r--r--CHANGES.txt3
-rw-r--r--pkg_resources.py26
-rw-r--r--setuptools/tests/test_resources.py24
3 files changed, 47 insertions, 6 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index e92f9cbf..73a10b36 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -6,6 +6,9 @@ CHANGES
0.6.5
-----
+* Distribute no longer shadows setuptools if we require a 0.7-series
+ setuptools.
+
* When run from within buildout, no attempt is made to modify an existing
setuptools egg, whether in a shared egg directory or a system setuptools.
diff --git a/pkg_resources.py b/pkg_resources.py
index 1d5d8643..510be536 100644
--- a/pkg_resources.py
+++ b/pkg_resources.py
@@ -504,8 +504,7 @@ class WorkingSet(object):
while requirements:
req = requirements.pop(0) # process dependencies breadth-first
- if req.project_name == 'setuptools':
- # TODO: only return distribute if setuptools < 0.7
+ if _override_setuptools(req):
req = Requirement.parse('distribute')
if req in processed:
@@ -2501,8 +2500,7 @@ class Requirement:
# if asked for setuptools distribution
# and if distribute is installed, we want to give
# distribute instead
- if founded_req.project_name == 'setuptools':
- # TODO: only return distribute if setuptools < 0.7
+ if _override_setuptools(founded_req):
distribute = list(parse_requirements('distribute'))
if len(distribute) == 1:
return distribute[0]
@@ -2526,6 +2524,26 @@ state_machine = {
}
+def _override_setuptools(req):
+ """Return True when distribute wants to override a setuptools dependency.
+
+ We want to override when the requirement is setuptools and the version is
+ a variant of 0.6.
+
+ """
+ if req.project_name == 'setuptools':
+ if not len(req.specs):
+ # Just setuptools: ok
+ return True
+ for comparator, version in req.specs:
+ if comparator in ['==', '>=', '>']:
+ if '0.7' in version:
+ # We want some setuptools not from the 0.6 series.
+ return False
+ return True
+ return False
+
+
def _get_mro(cls):
"""Get an mro for a type or classic class"""
if not isinstance(cls,type):
diff --git a/setuptools/tests/test_resources.py b/setuptools/tests/test_resources.py
index d53aef56..c9236e88 100644
--- a/setuptools/tests/test_resources.py
+++ b/setuptools/tests/test_resources.py
@@ -354,8 +354,28 @@ class RequirementsTests(TestCase):
self.failUnless(d("foo-0.3a3.egg") in r2)
self.failUnless(d("foo-0.3a5.egg") in r2)
-
-
+ def testDistributeSetuptoolsOverride(self):
+ # Plain setuptools or distribute mean we return distribute.
+ self.assertEqual(
+ Requirement.parse('setuptools').project_name, 'distribute')
+ self.assertEqual(
+ Requirement.parse('distribute').project_name, 'distribute')
+ # setuptools lower than 0.7 means distribute
+ self.assertEqual(
+ Requirement.parse('setuptools==0.6c9').project_name, 'distribute')
+ self.assertEqual(
+ Requirement.parse('setuptools==0.6c10').project_name, 'distribute')
+ self.assertEqual(
+ Requirement.parse('setuptools>=0.6').project_name, 'distribute')
+ self.assertEqual(
+ Requirement.parse('setuptools < 0.7').project_name, 'distribute')
+ # setuptools 0.7 and higher means setuptools.
+ self.assertEqual(
+ Requirement.parse('setuptools == 0.7').project_name, 'setuptools')
+ self.assertEqual(
+ Requirement.parse('setuptools == 0.7a1').project_name, 'setuptools')
+ self.assertEqual(
+ Requirement.parse('setuptools >= 0.7').project_name, 'setuptools')