summaryrefslogtreecommitdiff
path: root/tox/_config.py
diff options
context:
space:
mode:
Diffstat (limited to 'tox/_config.py')
-rw-r--r--tox/_config.py30
1 files changed, 27 insertions, 3 deletions
diff --git a/tox/_config.py b/tox/_config.py
index 3d26686..b7afc62 100644
--- a/tox/_config.py
+++ b/tox/_config.py
@@ -9,7 +9,8 @@ import pkg_resources
import itertools
from tox.interpreters import Interpreters
-
+from pip.req.req_file import parse_requirements
+from pip.download import PipSession
import py
import tox
@@ -371,6 +372,8 @@ class parseini:
vc.whitelist_externals = reader.getlist(section,
"whitelist_externals")
vc.deps = []
+ requirement_files = []
+
for depline in reader.getlist(section, "deps"):
m = re.match(r":(\w+):\s*(\S+)", depline)
if m:
@@ -379,8 +382,29 @@ class parseini:
else:
name = depline.strip()
ixserver = None
- name = self._replace_forced_dep(name, config)
- vc.deps.append(DepConfig(name, ixserver))
+
+
+ # We want to parse requirements.txt files last so that
+ # we can process them with forced dependencies
+ if name[:2] == '-r':
+ fname = name[2:].strip()
+ requirement_files.append(fname)
+ else:
+ name = self._replace_forced_dep(name, config)
+ vc.deps.append(DepConfig(name, ixserver))
+
+ pip_session = PipSession()
+
+ for requirement_file in requirement_files:
+ req_deps = parse_requirements(
+ requirement_file,
+ session=pip_session
+ )
+
+ for r in req_deps:
+ name = self._replace_forced_dep(r.name, config)
+ vc.deps.append(DepConfig(name, ixserver))
+
vc.distribute = reader.getbool(section, "distribute", False)
vc.sitepackages = self.config.option.sitepackages or \
reader.getbool(section, "sitepackages", False)