Add support for nested requirements files

pip supports requirements files with a line such as:

-r other-requirements.txt

for specifying nested requirements files.  Adding support to pbr
should be helpful with handling optional dependencies in projects
better, by allowing us to split the requirements files and then
merge them back together using -r lines.

Change-Id: I80e081b2229cc81eed26533c50afb07dc98a1db1
This commit is contained in:
Ben Nemec 2014-03-26 17:27:04 +00:00
parent 2aeb8da1dc
commit 960385efd5
2 changed files with 22 additions and 0 deletions

View File

@ -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:

View File

@ -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'])