[Pytest-commit] commit/tox: 4 new changesets

commits-noreply at bitbucket.org commits-noreply at bitbucket.org
Fri Jun 19 11:10:20 CEST 2015


4 new commits in tox:

https://bitbucket.org/hpk42/tox/commits/438a7c640081/
Changeset:   438a7c640081
Branch:      passenv_multiline
User:        mazzucco
Date:        2015-06-18 09:50:48+00:00
Summary:     hpk42/tox/issue/259/passenv-statement-should-accept-multi-line
Affected #:  2 files

diff -r 6d4378ce90621105cda12fb2f9dfc67dfbefc7ca -r 438a7c640081598e9d97d100fcbf5122c327e04f tests/test_config.py
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -696,14 +696,44 @@
         assert envconfig.setenv['ANOTHER_VAL'] == 'else'
 
     @pytest.mark.parametrize("plat", ["win32", "linux2"])
-    def test_passenv(self, tmpdir, newconfig, monkeypatch, plat):
+    def test_passenv_as_multiline_list(self, tmpdir, newconfig, monkeypatch, plat):
         monkeypatch.setattr(sys, "platform", plat)
         monkeypatch.setenv("A123A", "a")
         monkeypatch.setenv("A123B", "b")
         monkeypatch.setenv("BX23", "0")
         config = newconfig("""
             [testenv]
-            passenv = A123* B?23
+            passenv =
+                      A123*
+                      # isolated comment
+                      B?23
+        """)
+        assert len(config.envconfigs) == 1
+        envconfig = config.envconfigs['python']
+        if plat == "win32":
+            assert "PATHEXT" in envconfig.passenv
+            assert "SYSTEMDRIVE" in envconfig.passenv
+            assert "SYSTEMROOT" in envconfig.passenv
+            assert "TEMP" in envconfig.passenv
+            assert "TMP" in envconfig.passenv
+        else:
+            assert "TMPDIR" in envconfig.passenv
+        assert "PATH" in envconfig.passenv
+        assert "PIP_INDEX_URL" in envconfig.passenv
+        assert "LANG" in envconfig.passenv
+        assert "A123A" in envconfig.passenv
+        assert "A123B" in envconfig.passenv
+
+    @pytest.mark.parametrize("plat", ["win32", "linux2"])
+    def test_passenv_as_space_separated_list(self, tmpdir, newconfig, monkeypatch, plat):
+        monkeypatch.setattr(sys, "platform", plat)
+        monkeypatch.setenv("A123A", "a")
+        monkeypatch.setenv("A123B", "b")
+        monkeypatch.setenv("BX23", "0")
+        config = newconfig("""
+            [testenv]
+            passenv =
+                      A123*  B?23
         """)
         assert len(config.envconfigs) == 1
         envconfig = config.envconfigs['python']

diff -r 6d4378ce90621105cda12fb2f9dfc67dfbefc7ca -r 438a7c640081598e9d97d100fcbf5122c327e04f tox/config.py
--- a/tox/config.py
+++ b/tox/config.py
@@ -387,6 +387,11 @@
         help="list of X=Y lines with environment variable settings")
 
     def passenv(testenv_config, value):
+        if len(value) == 1 and "\n" in value[0]:
+            # If we have a list of 1 element that contains new lines,
+            # passenv has been specified as a multi line list.
+            value = value[0].split("\n")
+
         passenv = set(["PATH", "PIP_INDEX_URL", "LANG"])
 
         # we ensure that tmp directory settings are passed on


https://bitbucket.org/hpk42/tox/commits/84af17ba7280/
Changeset:   84af17ba7280
Branch:      passenv_multiline
User:        stefano-m
Date:        2015-06-18 20:15:04+00:00
Summary:     merge with default
Affected #:  7 files

diff -r 438a7c640081598e9d97d100fcbf5122c327e04f -r 84af17ba72801f740b12663e6f4cc56cbbb404eb CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,14 @@
+2.1.0
+----------
+
+- fix issue258, fix issue248, fix issue253: for non-test commands 
+  (installation, venv creation) we pass in the full invocation environment.
+
+- remove experimental --set-home option which was hardly used and
+  hackily implemented (if people want home-directory isolation we should
+  figure out a better way to do it, possibly through a plugin)
+
+
 2.0.2
 ----------
 

diff -r 438a7c640081598e9d97d100fcbf5122c327e04f -r 84af17ba72801f740b12663e6f4cc56cbbb404eb doc/config.txt
--- a/doc/config.txt
+++ b/doc/config.txt
@@ -195,14 +195,16 @@
 
    A list of wildcard environment variable names which
    shall be copied from the tox invocation environment to the test
-   environment.  If a specified environment variable doesn't exist in the tox
-   invocation environment it is ignored.  You can use ``*`` and ``?`` to
-   match multiple environment variables with one name.
+   environment when executing test commands.  If a specified environment
+   variable doesn't exist in the tox invocation environment it is ignored.
+   You can use ``*`` and ``?`` to match multiple environment variables with
+   one name.
 
-   Note that the ``PATH`` and ``PIP_INDEX_URL`` variables are unconditionally
-   passed down and on Windows ``SYSTEMROOT``, ``PATHEXT``, ``TEMP`` and ``TMP``
-   will be passed down as well whereas on unix ``TMPDIR`` will be passed down.
-   You can override these variables with the ``setenv`` option.
+   Note that the ``PATH``, ``LANG`` and ``PIP_INDEX_URL`` variables are
+   unconditionally passed down and on Windows ``SYSTEMROOT``, ``PATHEXT``,
+   ``TEMP`` and ``TMP`` will be passed down as well whereas on unix
+   ``TMPDIR`` will be passed down.  You can override these variables
+   with the ``setenv`` option.
 
 .. confval:: recreate=True|False(default)
 

diff -r 438a7c640081598e9d97d100fcbf5122c327e04f -r 84af17ba72801f740b12663e6f4cc56cbbb404eb setup.py
--- a/setup.py
+++ b/setup.py
@@ -48,7 +48,7 @@
         description='virtualenv-based automation of test activities',
         long_description=open("README.rst").read(),
         url='http://tox.testrun.org/',
-        version='2.0.2',
+        version='2.1.0.dev1',
         license='http://opensource.org/licenses/MIT',
         platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'],
         author='holger krekel',

diff -r 438a7c640081598e9d97d100fcbf5122c327e04f -r 84af17ba72801f740b12663e6f4cc56cbbb404eb tests/test_venv.py
--- a/tests/test_venv.py
+++ b/tests/test_venv.py
@@ -510,6 +510,7 @@
 def test_env_variables_added_to_pcall(tmpdir, mocksession, newconfig, monkeypatch):
     pkg = tmpdir.ensure("package.tar.gz")
     monkeypatch.setenv("X123", "123")
+    monkeypatch.setenv("YY", "456")
     config = newconfig([], """
         [testenv:python]
         commands=python -V
@@ -533,9 +534,12 @@
         assert env['ENV_VAR'] == 'value'
         assert env['VIRTUAL_ENV'] == str(venv.path)
         assert env['X123'] == "123"
+    # all env variables are passed for installation
+    assert l[0].env["YY"] == "456"
+    assert "YY" not in l[1].env
 
     assert set(["ENV_VAR", "VIRTUAL_ENV", "PYTHONHASHSEED", "X123", "PATH"])\
-        .issubset(env)
+        .issubset(l[1].env)
 
     # for e in os.environ:
     #    assert e in env
@@ -614,49 +618,3 @@
     x4 = venv.getcommandpath("x", cwd=tmpdir)
     assert x4.endswith(os.sep + 'x')
     mocksession.report.expect("warning", "*test command found but not*")
-
-
-def test_sethome_only_on_option(newmocksession, monkeypatch):
-    mocksession = newmocksession([], "")
-    venv = mocksession.getenv('python')
-    action = mocksession.newaction(venv, "qwe", [])
-    monkeypatch.setattr(tox.venv, "hack_home_env", None)
-    venv._install(["x"], action=action)
-
-
-def test_sethome_works_on_option(newmocksession, monkeypatch):
-    mocksession = newmocksession(["--set-home", "-i ALL=http://qwe"], "")
-    venv = mocksession.getenv('python')
-    action = mocksession.newaction(venv, "qwe", [])
-    venv._install(["x"], action=action)
-    _, mocked = mocksession.report.getnext("logpopen")
-    p = mocked.env["HOME"]
-    pydist = py.path.local(p).join(".pydistutils.cfg")
-    assert "http://qwe" in pydist.read()
-
-
-def test_hack_home_env(tmpdir):
-    from tox.venv import hack_home_env
-    env = hack_home_env(tmpdir, "http://index")
-    assert env["HOME"] == str(tmpdir)
-    assert env["PIP_INDEX_URL"] == "http://index"
-    assert "index_url = http://index" in \
-           tmpdir.join(".pydistutils.cfg").read()
-    tmpdir.remove()
-    env = hack_home_env(tmpdir, None)
-    assert env["HOME"] == str(tmpdir)
-    assert not tmpdir.join(".pydistutils.cfg").check()
-    assert "PIP_INDEX_URL" not in env
-
-
-def test_hack_home_env_passthrough(tmpdir, monkeypatch):
-    from tox.venv import hack_home_env
-    env = hack_home_env(tmpdir, "http://index")
-    monkeypatch.setattr(os, "environ", env)
-
-    tmpdir = tmpdir.mkdir("tmpdir2")
-    env2 = hack_home_env(tmpdir)
-    assert env2["HOME"] == str(tmpdir)
-    assert env2["PIP_INDEX_URL"] == "http://index"
-    assert "index_url = http://index" in \
-           tmpdir.join(".pydistutils.cfg").read()

diff -r 438a7c640081598e9d97d100fcbf5122c327e04f -r 84af17ba72801f740b12663e6f4cc56cbbb404eb tox/__init__.py
--- a/tox/__init__.py
+++ b/tox/__init__.py
@@ -1,5 +1,5 @@
 #
-__version__ = '2.0.2'
+__version__ = '2.1.0.dev1'
 
 from .hookspecs import hookspec, hookimpl  # noqa
 

diff -r 438a7c640081598e9d97d100fcbf5122c327e04f -r 84af17ba72801f740b12663e6f4cc56cbbb404eb tox/config.py
--- a/tox/config.py
+++ b/tox/config.py
@@ -283,10 +283,6 @@
     parser.add_argument("--develop", action="store_true", dest="develop",
                         help="install package in the venv using 'setup.py develop' via "
                              "'pip -e .'")
-    parser.add_argument("--set-home", action="store_true", dest="sethome",
-                        help="(experimental) force creating a new $HOME for each test "
-                             "environment and create .pydistutils.cfg|pip.conf files "
-                             "if index servers are specified with tox. ")
     parser.add_argument('-i', action="append",
                         dest="indexurl", metavar="URL",
                         help="set indexserver url (if URL is of form name=url set the "
@@ -299,11 +295,9 @@
                         dest="recreate",
                         help="force recreation of virtual environments")
     parser.add_argument("--result-json", action="store",
-                        dest="resultjson", metavar="PATH",
-                        help="write a json file with detailed information about "
-                             "all commands and results involved.  This will turn off "
-                             "pass-through output from running test commands which is "
-                             "instead captured into the json result file.")
+        dest="resultjson", metavar="PATH",
+        help="write a json file with detailed information about "
+             "all commands and results involved.")
 
     # We choose 1 to 4294967295 because it is the range of PYTHONHASHSEED.
     parser.add_argument("--hashseed", action="store",
@@ -414,8 +408,11 @@
 
     parser.add_testenv_attribute(
         name="passenv", type="space-separated-list", postprocess=passenv,
-        help="environment variables names which shall be passed "
-             "from tox invocation to test environment when executing commands.")
+        help="environment variables needed during executing test commands "
+             "(taken from invocation environment). Note that tox always "
+             "passes through some basic environment variables which are "
+             "needed for basic functioning of the Python system. "
+             "See --showconfig for the eventual passenv setting.")
 
     parser.add_testenv_attribute(
         name="whitelist_externals", type="line-list",

diff -r 438a7c640081598e9d97d100fcbf5122c327e04f -r 84af17ba72801f740b12663e6f4cc56cbbb404eb tox/venv.py
--- a/tox/venv.py
+++ b/tox/venv.py
@@ -259,9 +259,7 @@
             l.append("--pre")
         return l
 
-    def run_install_command(self, packages, options=(),
-                            indexserver=None, action=None,
-                            extraenv=None):
+    def run_install_command(self, packages, options=(), action=None):
         argv = self.envconfig.install_command[:]
         # use pip-script on win32 to avoid the executable locking
         i = argv.index('{packages}')
@@ -269,18 +267,14 @@
         if '{opts}' in argv:
             i = argv.index('{opts}')
             argv[i:i + 1] = list(options)
+
         for x in ('PIP_RESPECT_VIRTUALENV', 'PIP_REQUIRE_VIRTUALENV',
                   '__PYVENV_LAUNCHER__'):
-            try:
-                del os.environ[x]
-            except KeyError:
-                pass
+            os.environ.pop(x, None)
+
         old_stdout = sys.stdout
         sys.stdout = codecs.getwriter('utf8')(sys.stdout)
-        if extraenv is None:
-            extraenv = {}
-        self._pcall(argv, cwd=self.envconfig.config.toxinidir,
-                    extraenv=extraenv, action=action)
+        self._pcall(argv, cwd=self.envconfig.config.toxinidir, action=action)
         sys.stdout = old_stdout
 
     def _install(self, deps, extraopts=None, action=None):
@@ -302,31 +296,29 @@
             assert ixserver.url is None or isinstance(ixserver.url, str)
 
         for ixserver in l:
-            if self.envconfig.config.option.sethome:
-                extraenv = hack_home_env(
-                    homedir=self.envconfig.envtmpdir.join("pseudo-home"),
-                    index_url=ixserver.url)
-            else:
-                extraenv = {}
-
             packages = d[ixserver]
             options = self._installopts(ixserver.url)
             if extraopts:
                 options.extend(extraopts)
             self.run_install_command(packages=packages, options=options,
-                                     action=action, extraenv=extraenv)
+                                     action=action)
 
-    def _getenv(self, extraenv={}):
-        env = {}
-        for envname in self.envconfig.passenv:
-            if envname in os.environ:
-                env[envname] = os.environ[envname]
+    def _getenv(self, testcommand=False):
+        if testcommand:
+            # for executing tests we construct a clean environment
+            env = {}
+            for envname in self.envconfig.passenv:
+                if envname in os.environ:
+                    env[envname] = os.environ[envname]
+        else:
+            # for executing non-test commands we use the full
+            # invocation environment
+            env = os.environ.copy()
 
+        # in any case we honor per-testenv setenv configuration
         env.update(self.envconfig.setenv)
 
         env['VIRTUAL_ENV'] = str(self.path)
-
-        env.update(extraenv)
         return env
 
     def test(self, redirect=False):
@@ -335,7 +327,7 @@
             self.status = 0
             self.session.make_emptydir(self.envconfig.envtmpdir)
             cwd = self.envconfig.changedir
-            env = self._getenv()
+            env = self._getenv(testcommand=True)
             # Display PYTHONHASHSEED to assist with reproducibility.
             action.setactivity("runtests", "PYTHONHASHSEED=%r" % env.get('PYTHONHASHSEED'))
             for i, argv in enumerate(self.envconfig.commands):
@@ -357,7 +349,7 @@
 
                 try:
                     self._pcall(argv, cwd=cwd, action=action, redirect=redirect,
-                                ignore_ret=ignore_ret)
+                                ignore_ret=ignore_ret, testcommand=True)
                 except tox.exception.InvocationError as err:
                     self.session.report.error(str(err))
                     self.status = "commands failed"
@@ -368,20 +360,18 @@
                     self.session.report.error(self.status)
                     raise
 
-    def _pcall(self, args, venv=True, cwd=None, extraenv={},
+    def _pcall(self, args, cwd, venv=True, testcommand=False,
                action=None, redirect=True, ignore_ret=False):
         for name in ("VIRTUALENV_PYTHON", "PYTHONDONTWRITEBYTECODE"):
-            try:
-                del os.environ[name]
-            except KeyError:
-                pass
-        assert cwd
+            os.environ.pop(name, None)
+
         cwd.ensure(dir=1)
         old = self.patchPATH()
         try:
             args[0] = self.getcommandpath(args[0], venv, cwd)
-            env = self._getenv(extraenv)
-            return action.popen(args, cwd=cwd, env=env, redirect=redirect, ignore_ret=ignore_ret)
+            env = self._getenv(testcommand=testcommand)
+            return action.popen(args, cwd=cwd, env=env,
+                                redirect=redirect, ignore_ret=ignore_ret)
         finally:
             os.environ['PATH'] = old
 
@@ -398,25 +388,3 @@
     if not path.check(file=1):
         return "0" * 32
     return path.computehash()
-
-
-def hack_home_env(homedir, index_url=None):
-    # XXX HACK (this could also live with tox itself, consider)
-    # if tox uses pip on a package that requires setup_requires
-    # the index url set with pip is usually not recognized
-    # because it is setuptools executing very early.
-    # We therefore run the tox command in an artifical home
-    # directory and set .pydistutils.cfg and pip.conf files
-    # accordingly.
-    if not homedir.check():
-        homedir.ensure(dir=1)
-    d = dict(HOME=str(homedir))
-    if not index_url:
-        index_url = os.environ.get("TOX_INDEX_URL")
-    if index_url:
-        homedir.join(".pydistutils.cfg").write(
-            "[easy_install]\n"
-            "index_url = %s\n" % index_url)
-        d["PIP_INDEX_URL"] = index_url
-        d["TOX_INDEX_URL"] = index_url
-    return d


https://bitbucket.org/hpk42/tox/commits/32306cad6374/
Changeset:   32306cad6374
Branch:      passenv_multiline
User:        stefano-m
Date:        2015-06-18 21:56:38+00:00
Summary:     make passenv attribute type line-list
Affected #:  2 files

diff -r 84af17ba72801f740b12663e6f4cc56cbbb404eb -r 32306cad63746de7c48760d0021df8371b4269be tests/test_config.py
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -733,6 +733,7 @@
         config = newconfig("""
             [testenv]
             passenv =
+                      # comment
                       A123*  B?23
         """)
         assert len(config.envconfigs) == 1
@@ -754,20 +755,39 @@
     def test_passenv_with_factor(self, tmpdir, newconfig, monkeypatch):
         monkeypatch.setenv("A123A", "a")
         monkeypatch.setenv("A123B", "b")
+        monkeypatch.setenv("A123C", "c")
+        monkeypatch.setenv("A123D", "d")
         monkeypatch.setenv("BX23", "0")
+        monkeypatch.setenv("CCA43", "3")
+        monkeypatch.setenv("CB21", "4")
         config = newconfig("""
             [tox]
             envlist = {x1,x2}
             [testenv]
             passenv =
-                x1: A123A
-                x2: A123B
+                x1: A123A CC*
+                x1: CB21
+                # passed to both environments
+                A123C
+                x2: A123B A123D
         """)
         assert len(config.envconfigs) == 2
+
         assert "A123A" in config.envconfigs["x1"].passenv
+        assert "A123C" in config.envconfigs["x1"].passenv
+        assert "CCA43" in config.envconfigs["x1"].passenv
+        assert "CB21" in config.envconfigs["x1"].passenv
         assert "A123B" not in config.envconfigs["x1"].passenv
+        assert "A123D" not in config.envconfigs["x1"].passenv
+        assert "BX23" not in config.envconfigs["x1"].passenv
+
         assert "A123B" in config.envconfigs["x2"].passenv
+        assert "A123D" in config.envconfigs["x2"].passenv
         assert "A123A" not in config.envconfigs["x2"].passenv
+        assert "A123C" in config.envconfigs["x2"].passenv
+        assert "CCA43" not in config.envconfigs["x2"].passenv
+        assert "CB21" not in config.envconfigs["x2"].passenv
+        assert "BX23" not in config.envconfigs["x2"].passenv
 
     def test_changedir_override(self, tmpdir, newconfig):
         config = newconfig("""

diff -r 84af17ba72801f740b12663e6f4cc56cbbb404eb -r 32306cad63746de7c48760d0021df8371b4269be tox/config.py
--- a/tox/config.py
+++ b/tox/config.py
@@ -381,10 +381,10 @@
         help="list of X=Y lines with environment variable settings")
 
     def passenv(testenv_config, value):
-        if len(value) == 1 and "\n" in value[0]:
-            # If we have a list of 1 element that contains new lines,
-            # passenv has been specified as a multi line list.
-            value = value[0].split("\n")
+        # Flatten the list to deal with space-separated values.
+        value = list(
+            itertools.chain.from_iterable(
+                [x.split(' ') for x in value]))
 
         passenv = set(["PATH", "PIP_INDEX_URL", "LANG"])
 
@@ -407,7 +407,7 @@
         return passenv
 
     parser.add_testenv_attribute(
-        name="passenv", type="space-separated-list", postprocess=passenv,
+        name="passenv", type="line-list", postprocess=passenv,
         help="environment variables needed during executing test commands "
              "(taken from invocation environment). Note that tox always "
              "passes through some basic environment variables which are "


https://bitbucket.org/hpk42/tox/commits/37c6dac2b848/
Changeset:   37c6dac2b848
User:        hpk42
Date:        2015-06-19 09:10:16+00:00
Summary:     Merged in stefano-m/tox/passenv_multiline (pull request #166)

Issue #259 passenv statement should accept multi-line list
Affected #:  2 files

diff -r 673d3f1f8d095cd8e1733506ffdc2f162b93e59b -r 37c6dac2b8484bb084dd6fff81fde108e5b96a4c tests/test_config.py
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -696,14 +696,45 @@
         assert envconfig.setenv['ANOTHER_VAL'] == 'else'
 
     @pytest.mark.parametrize("plat", ["win32", "linux2"])
-    def test_passenv(self, tmpdir, newconfig, monkeypatch, plat):
+    def test_passenv_as_multiline_list(self, tmpdir, newconfig, monkeypatch, plat):
         monkeypatch.setattr(sys, "platform", plat)
         monkeypatch.setenv("A123A", "a")
         monkeypatch.setenv("A123B", "b")
         monkeypatch.setenv("BX23", "0")
         config = newconfig("""
             [testenv]
-            passenv = A123* B?23
+            passenv =
+                      A123*
+                      # isolated comment
+                      B?23
+        """)
+        assert len(config.envconfigs) == 1
+        envconfig = config.envconfigs['python']
+        if plat == "win32":
+            assert "PATHEXT" in envconfig.passenv
+            assert "SYSTEMDRIVE" in envconfig.passenv
+            assert "SYSTEMROOT" in envconfig.passenv
+            assert "TEMP" in envconfig.passenv
+            assert "TMP" in envconfig.passenv
+        else:
+            assert "TMPDIR" in envconfig.passenv
+        assert "PATH" in envconfig.passenv
+        assert "PIP_INDEX_URL" in envconfig.passenv
+        assert "LANG" in envconfig.passenv
+        assert "A123A" in envconfig.passenv
+        assert "A123B" in envconfig.passenv
+
+    @pytest.mark.parametrize("plat", ["win32", "linux2"])
+    def test_passenv_as_space_separated_list(self, tmpdir, newconfig, monkeypatch, plat):
+        monkeypatch.setattr(sys, "platform", plat)
+        monkeypatch.setenv("A123A", "a")
+        monkeypatch.setenv("A123B", "b")
+        monkeypatch.setenv("BX23", "0")
+        config = newconfig("""
+            [testenv]
+            passenv =
+                      # comment
+                      A123*  B?23
         """)
         assert len(config.envconfigs) == 1
         envconfig = config.envconfigs['python']
@@ -724,20 +755,39 @@
     def test_passenv_with_factor(self, tmpdir, newconfig, monkeypatch):
         monkeypatch.setenv("A123A", "a")
         monkeypatch.setenv("A123B", "b")
+        monkeypatch.setenv("A123C", "c")
+        monkeypatch.setenv("A123D", "d")
         monkeypatch.setenv("BX23", "0")
+        monkeypatch.setenv("CCA43", "3")
+        monkeypatch.setenv("CB21", "4")
         config = newconfig("""
             [tox]
             envlist = {x1,x2}
             [testenv]
             passenv =
-                x1: A123A
-                x2: A123B
+                x1: A123A CC*
+                x1: CB21
+                # passed to both environments
+                A123C
+                x2: A123B A123D
         """)
         assert len(config.envconfigs) == 2
+
         assert "A123A" in config.envconfigs["x1"].passenv
+        assert "A123C" in config.envconfigs["x1"].passenv
+        assert "CCA43" in config.envconfigs["x1"].passenv
+        assert "CB21" in config.envconfigs["x1"].passenv
         assert "A123B" not in config.envconfigs["x1"].passenv
+        assert "A123D" not in config.envconfigs["x1"].passenv
+        assert "BX23" not in config.envconfigs["x1"].passenv
+
         assert "A123B" in config.envconfigs["x2"].passenv
+        assert "A123D" in config.envconfigs["x2"].passenv
         assert "A123A" not in config.envconfigs["x2"].passenv
+        assert "A123C" in config.envconfigs["x2"].passenv
+        assert "CCA43" not in config.envconfigs["x2"].passenv
+        assert "CB21" not in config.envconfigs["x2"].passenv
+        assert "BX23" not in config.envconfigs["x2"].passenv
 
     def test_changedir_override(self, tmpdir, newconfig):
         config = newconfig("""

diff -r 673d3f1f8d095cd8e1733506ffdc2f162b93e59b -r 37c6dac2b8484bb084dd6fff81fde108e5b96a4c tox/config.py
--- a/tox/config.py
+++ b/tox/config.py
@@ -381,6 +381,11 @@
         help="list of X=Y lines with environment variable settings")
 
     def passenv(testenv_config, value):
+        # Flatten the list to deal with space-separated values.
+        value = list(
+            itertools.chain.from_iterable(
+                [x.split(' ') for x in value]))
+
         passenv = set(["PATH", "PIP_INDEX_URL", "LANG"])
 
         # we ensure that tmp directory settings are passed on
@@ -402,7 +407,7 @@
         return passenv
 
     parser.add_testenv_attribute(
-        name="passenv", type="space-separated-list", postprocess=passenv,
+        name="passenv", type="line-list", postprocess=passenv,
         help="environment variables needed during executing test commands "
              "(taken from invocation environment). Note that tox always "
              "passes through some basic environment variables which are "

Repository URL: https://bitbucket.org/hpk42/tox/

--

This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.


More information about the pytest-commit mailing list