summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG3
-rw-r--r--tests/test_config.py17
-rw-r--r--tox/config.py9
3 files changed, 27 insertions, 2 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 3be2703..26447a4 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,9 @@
2.4.0
-----
+- add --workdir option to override where tox stores its ".tox" directory
+ and all of the virtualenv environment. Thanks Danring.
+
- introduce per-venv list_dependencies_command which defaults
to "python -m pip freeze" to obtain the list of installed packages.
If you need to run python2.6 you need to configure it to
diff --git a/tests/test_config.py b/tests/test_config.py
index 863e55c..08b2f23 100644
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -1914,6 +1914,23 @@ class TestCmdInvocation:
"*ERROR*tox.ini*not*found*",
])
+ def test_override_workdir(self, tmpdir, cmd, initproj):
+ baddir = "badworkdir-123"
+ gooddir = "overridden-234"
+ initproj("overrideworkdir-0.5", filedefs={
+ 'tox.ini': '''
+ [tox]
+ toxworkdir=%s
+ ''' % baddir,
+ })
+ result = cmd.run("tox", "--workdir", gooddir, "--showconfig")
+ assert not result.ret
+ stdout = result.stdout.str()
+ assert gooddir in stdout
+ assert baddir not in stdout
+ assert py.path.local(gooddir).check()
+ assert not py.path.local(baddir).check()
+
def test_showconfig_with_force_dep_version(self, cmd, initproj):
initproj('force_dep_version', filedefs={
'tox.ini': '''
diff --git a/tox/config.py b/tox/config.py
index 362459e..bc7ca02 100644
--- a/tox/config.py
+++ b/tox/config.py
@@ -370,6 +370,9 @@ def tox_addoption(parser):
help="override sitepackages setting to True in all envs")
parser.add_argument("--skip-missing-interpreters", action="store_true",
help="don't fail tests for missing interpreters")
+ parser.add_argument("--workdir", action="store",
+ dest="workdir", metavar="PATH", default=None,
+ help="tox working directory")
parser.add_argument("args", nargs="*",
help="additional arguments available to command positional substitution")
@@ -684,7 +687,6 @@ class parseini:
# As older versions of tox may have bugs or incompatabilities that
# prevent parsing of tox.ini this must be the first thing checked.
config.minversion = reader.getstring("minversion", None)
- # Parse our compatability immediately
if config.minversion:
minversion = NormalizedVersion(self.config.minversion)
toxversion = NormalizedVersion(tox.__version__)
@@ -692,7 +694,10 @@ class parseini:
raise tox.exception.MinVersionError(
"tox version is %s, required is at least %s" % (
toxversion, minversion))
- config.toxworkdir = reader.getpath("toxworkdir", "{toxinidir}/.tox")
+ if config.option.workdir is None:
+ config.toxworkdir = reader.getpath("toxworkdir", "{toxinidir}/.tox")
+ else:
+ config.toxworkdir = config.toxinidir.join(config.option.workdir, abs=True)
if not config.option.skip_missing_interpreters:
config.option.skip_missing_interpreters = \