summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-06-04 00:36:38 +0000
committerGerrit Code Review <review@openstack.org>2013-06-04 00:36:38 +0000
commitc65554f24bc12f1560e2a4b83314a17361c0269d (patch)
treea3b95401dfaf60ee5f2674c235660d92ae271ba8
parentdc952ecd751347bed13575008aa9bfe46e340587 (diff)
parent2dc50ea1e467fa5a301fc6b6812b798599f0ac04 (diff)
downloadpbr-c65554f24bc12f1560e2a4b83314a17361c0269d.tar.gz
Merge "Handle versioned egg fragments in dependency URLs"
-rw-r--r--pbr/packaging.py21
-rw-r--r--pbr/tests/test_setup.py12
2 files changed, 29 insertions, 4 deletions
diff --git a/pbr/packaging.py b/pbr/packaging.py
index 2079864..abaa7f5 100644
--- a/pbr/packaging.py
+++ b/pbr/packaging.py
@@ -75,20 +75,33 @@ def get_reqs_from_files(requirements_files):
def parse_requirements(requirements_files=['requirements.txt',
'tools/pip-requires']):
+
+ def egg_fragment(match):
+ # take a versioned egg fragment and return a
+ # versioned package requirement e.g.
+ # nova-1.2.3 becomes nova>=1.2.3
+ return re.sub(r'([\w.]+)-([\w.-]+)',
+ r'\1>=\2',
+ match.group(1))
+
requirements = []
for line in get_reqs_from_files(requirements_files):
# For the requirements list, we need to inject only the portion
# after egg= so that distutils knows the package it's looking for
# such as:
# -e git://github.com/openstack/nova/master#egg=nova
+ # -e git://github.com/openstack/nova/master#egg=nova-1.2.3
if re.match(r'\s*-e\s+', line):
- requirements.append(re.sub(r'\s*-e\s+.*#egg=(.*)$', r'\1',
- line))
+ requirements.append(re.sub(r'\s*-e\s+.*#egg=(.*)$',
+ egg_fragment,
+ line))
# such as:
# http://github.com/openstack/nova/zipball/master#egg=nova
+ # http://github.com/openstack/nova/zipball/master#egg=nova-1.2.3
elif re.match(r'\s*https?:', line):
- requirements.append(re.sub(r'\s*https?:.*#egg=(.*)$', r'\1',
- line))
+ requirements.append(re.sub(r'\s*https?:.*#egg=(.*)$',
+ egg_fragment,
+ line))
# -f lines are for index locations, and don't get used here
elif re.match(r'\s*-f\s+', line):
pass
diff --git a/pbr/tests/test_setup.py b/pbr/tests/test_setup.py
index 406c18e..61bd799 100644
--- a/pbr/tests/test_setup.py
+++ b/pbr/tests/test_setup.py
@@ -280,12 +280,24 @@ class ParseRequirementsTest(tests.BaseTestCase):
self.assertEqual(['bar'],
packaging.parse_requirements([self.tmp_file]))
+ def test_parse_requirements_with_versioned_git_egg_url(self):
+ with open(self.tmp_file, 'w') as fh:
+ fh.write("-e git://foo.com/zipball#egg=bar-1.2.4")
+ self.assertEqual(['bar>=1.2.4'],
+ packaging.parse_requirements([self.tmp_file]))
+
def test_parse_requirements_with_http_egg_url(self):
with open(self.tmp_file, 'w') as fh:
fh.write("https://foo.com/zipball#egg=bar")
self.assertEqual(['bar'],
packaging.parse_requirements([self.tmp_file]))
+ def test_parse_requirements_with_versioned_http_egg_url(self):
+ with open(self.tmp_file, 'w') as fh:
+ fh.write("https://foo.com/zipball#egg=bar-4.2.1")
+ self.assertEqual(['bar>=4.2.1'],
+ packaging.parse_requirements([self.tmp_file]))
+
def test_parse_requirements_removes_index_lines(self):
with open(self.tmp_file, 'w') as fh:
fh.write("-f foobar")