summaryrefslogtreecommitdiff
path: root/tox/_config.py
diff options
context:
space:
mode:
Diffstat (limited to 'tox/_config.py')
-rw-r--r--tox/_config.py39
1 files changed, 37 insertions, 2 deletions
diff --git a/tox/_config.py b/tox/_config.py
index ceae6b9..de75e2b 100644
--- a/tox/_config.py
+++ b/tox/_config.py
@@ -1,4 +1,5 @@
import argparse
+import tempfile
import os
import random
import sys
@@ -363,6 +364,7 @@ class parseini:
vc.whitelist_externals = reader.getlist(section,
"whitelist_externals")
vc.deps = []
+ reqs_files = []
for depline in reader.getlist(section, "deps"):
m = re.match(r":(\w+):\s*(\S+)", depline)
if m:
@@ -371,8 +373,41 @@ class parseini:
else:
name = depline.strip()
ixserver = None
- name = self._replace_forced_dep(name, config)
- vc.deps.append(DepConfig(name, ixserver))
+
+ if name[:2] == '-r': # not a dependency, but a file full of dependencies
+ fd, temp_path = tempfile.mkstemp()
+ reqs_files.append((name[2:].strip(), fd, temp_path))
+ vc.deps.append(DepConfig('-r%s' % temp_path))
+ elif name[0] == '-': # an option to be sent to pip
+ vc.deps.append(DepConfig(name, ixserver))
+ else:
+ name = self._replace_forced_dep(name, config)
+ vc.deps.append(DepConfig(name, ixserver))
+
+ for reqs_file, fd, temp_path in reqs_files:
+ lines = []
+ with open(reqs_file, 'r') as reqs:
+ for req in reqs.readlines():
+ req = req.strip()
+ if not req:
+ continue
+
+ if req.startswith('-'):
+ if req.startswith('-r'):
+ new_fd, new_temp_path = tempfile.mkstemp()
+ reqs_files.append((req[2:].strip(), new_fd, new_temp_path))
+ lines.append('-r' + new_temp_path)
+ else:
+ lines.append(req)
+ continue
+
+ name = self._replace_forced_dep(req, config)
+ lines.append(name)
+
+ with open(temp_path, mode='w') as temp_reqs:
+ temp_reqs.writelines(os.linesep.join(lines))
+ os.close(fd)
+
vc.distribute = reader.getbool(section, "distribute", False)
vc.sitepackages = self.config.option.sitepackages or \
reader.getbool(section, "sitepackages", False)