diff options
-rw-r--r-- | pbr/packaging.py | 7 | ||||
-rw-r--r-- | pbr/tests/test_packaging.py | 15 |
2 files changed, 22 insertions, 0 deletions
diff --git a/pbr/packaging.py b/pbr/packaging.py index 21b2b82..9b022a7 100644 --- a/pbr/packaging.py +++ b/pbr/packaging.py @@ -125,6 +125,13 @@ def parse_requirements(requirements_files=None): if (not line.strip()) or line.startswith('#'): continue + # Handle nested requirements files such as: + # -r other-requirements.txt + if line.startswith('-r'): + req_file = line.partition(' ')[2] + requirements += parse_requirements([req_file]) + continue + try: project_name = pkg_resources.Requirement.parse(line).project_name except ValueError: diff --git a/pbr/tests/test_packaging.py b/pbr/tests/test_packaging.py index 029f378..d382d37 100644 --- a/pbr/tests/test_packaging.py +++ b/pbr/tests/test_packaging.py @@ -39,6 +39,7 @@ # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS import os +import tempfile import fixtures import mock @@ -126,3 +127,17 @@ class TestPresenceOfGit(base.BaseTestCase): '_run_shell_command') as _command: _command.side_effect = OSError self.assertEqual(False, packaging._git_is_installed()) + + +class TestNestedRequirements(base.BaseTestCase): + + def test_nested_requirement(self): + tempdir = tempfile.mkdtemp() + requirements = os.path.join(tempdir, 'requirements.txt') + nested = os.path.join(tempdir, 'nested.txt') + with open(requirements, 'w') as f: + f.write('-r ' + nested) + with open(nested, 'w') as f: + f.write('pbr') + result = packaging.parse_requirements([requirements]) + self.assertEqual(result, ['pbr']) |