From a6171f3ec379ef0c114cfb27532c77c32bd6d096 Mon Sep 17 00:00:00 2001 From: John Hensley Date: Tue, 26 Jun 2012 17:28:17 -0400 Subject: [PATCH] Try to fix some Python 3 issues. Dunno what to do about the Mercurial/Bazaar test failures under it. --- pip/index.py | 26 ++++++++++++++++++++------ pip/util.py | 12 ++++++++++++ tests/test_index_preference.py | 2 +- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/pip/index.py b/pip/index.py index 80937cf6516..b7939e1d2b9 100644 --- a/pip/index.py +++ b/pip/index.py @@ -110,9 +110,8 @@ def find_requirement(self, req, upgrade): # Assign a preference value to all index, mirror, or find_links # package sources. The lower the number, the higher the preference. - # Start at 1; if the desired version of a package is installed, it - # should win, so it's assigned a preference of zero. - origin_preferences = dict([(str(e[1]), e[0] + 1) for e in enumerate(all_index_urls + self.find_links)]) + all_origins = reversed(all_index_urls + self.find_links) + origin_preferences = dict([(str(e[1]), e[0]) for e in enumerate(all_origins)]) logger.debug('Origin preferences: %s' % origin_preferences) def mkurl_pypi_url(url): @@ -172,15 +171,18 @@ def mkurl_pypi_url(url): found_versions = file_versions + found_versions all_versions = found_versions + page_versions + dependency_versions applicable_versions = [] + + highest_preference = float('inf') + lowest_preference = float('-inf') for (parsed_version, link, version) in all_versions: if version not in req.req: logger.info("Ignoring link %s, version %s doesn't match %s" % (link, version, ','.join([''.join(s) for s in req.req.specs]))) continue - preference = Inf + preference = lowest_preference if link is Inf: # this version is currently installed; it wins. - preference = 0 + preference = highest_preference else: for origin in origin_preferences.keys(): link_url = link.comes_from and link.comes_from.url or link.url @@ -189,7 +191,7 @@ def mkurl_pypi_url(url): break applicable_versions.append((link, version, parsed_version, preference)) # sort applicable_versions by origin preference - applicable_versions = sorted(applicable_versions, key=operator.itemgetter(3)) + applicable_versions = sorted(applicable_versions, key=operator.itemgetter(3), reverse=True) # and then by version applicable_versions = sorted(applicable_versions, key=operator.itemgetter(2), reverse=True) existing_applicable = bool([link for link, version, parsed_version, preference in applicable_versions if link is Inf]) @@ -611,6 +613,18 @@ def __str__(self): else: return self.url + def __ge__(self, other): + return self.url >= other.url + + def __gt__(self, other): + return self.url > other.url + + def __le__(self, other): + return self.url <= other.url + + def __lt__(self, other): + return self.url < other.url + def __repr__(self): return '' % self diff --git a/pip/util.py b/pip/util.py index 619f06531e9..8252a55bf4f 100644 --- a/pip/util.py +++ b/pip/util.py @@ -132,6 +132,18 @@ def __cmp__(self, a): return 0 return 1 + def __ge__(self, a): + return True + + def __gt__(self, a): + return True + + def __le__(self, a): + return False + + def __lt__(self, a): + return False + def __repr__(self): return 'Inf' diff --git a/tests/test_index_preference.py b/tests/test_index_preference.py index bbd2b1326e5..7328b11225a 100644 --- a/tests/test_index_preference.py +++ b/tests/test_index_preference.py @@ -2,7 +2,7 @@ import re import shutil -from test_pip import here, reset_env, run_pip +from tests.test_pip import here, reset_env, run_pip def test_index_preference():