diff options
author | Jenkins <jenkins@review.openstack.org> | 2013-06-04 00:36:38 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2013-06-04 00:36:38 +0000 |
commit | c65554f24bc12f1560e2a4b83314a17361c0269d (patch) | |
tree | a3b95401dfaf60ee5f2674c235660d92ae271ba8 | |
parent | dc952ecd751347bed13575008aa9bfe46e340587 (diff) | |
parent | 2dc50ea1e467fa5a301fc6b6812b798599f0ac04 (diff) | |
download | pbr-c65554f24bc12f1560e2a4b83314a17361c0269d.tar.gz |
Merge "Handle versioned egg fragments in dependency URLs"
-rw-r--r-- | pbr/packaging.py | 21 | ||||
-rw-r--r-- | pbr/tests/test_setup.py | 12 |
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") |