diff --git a/CONTRIBUTORS b/CONTRIBUTORS index ca325a320..f3fc34074 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -35,6 +35,7 @@ David Diaz Ederag Eli Collins Eugene Yunak +Fabian Poggenhans Felix Hildén Fernando L. Pereira Florian Bruhin diff --git a/docs/changelog/2372.feature.rst b/docs/changelog/2372.feature.rst new file mode 100644 index 000000000..470dbc5f8 --- /dev/null +++ b/docs/changelog/2372.feature.rst @@ -0,0 +1 @@ +Add default environment variables (such as http_proxy) regardless of their case to passenv on UNIX -- by :user:`poggenhans`. diff --git a/docs/config.rst b/docs/config.rst index 8f277ffe5..c579733eb 100644 --- a/docs/config.rst +++ b/docs/config.rst @@ -460,7 +460,8 @@ Complete list of settings that you can put into ``testenv*`` sections: ``A`` will pass both ``A`` and ``a``. Some variables are always passed through to ensure the basic functionality - of standard library functions or tooling like pip: + of standard library functions or tooling like pip. + This is also not case sensitive on all platforms except Windows: * passed through on all platforms: ``CURL_CA_BUNDLE``, ``PATH``, ``LANG``, ``LANGUAGE``, diff --git a/src/tox/config/__init__.py b/src/tox/config/__init__.py index 10acbe12a..b155fd1cf 100644 --- a/src/tox/config/__init__.py +++ b/src/tox/config/__init__.py @@ -809,6 +809,10 @@ def passenv(testenv_config, value): passenv.add("MSYSTEM") # fixes #429 else: passenv.add("TMPDIR") + + # add non-uppercased variables to passenv if present (only necessary for UNIX) + passenv.update(name for name in os.environ if name.upper() in passenv) + for spec in value: for name in os.environ: if fnmatchcase(name.upper(), spec.upper()): diff --git a/tests/unit/config/test_config.py b/tests/unit/config/test_config.py index d6ff0aba4..6949bf938 100644 --- a/tests/unit/config/test_config.py +++ b/tests/unit/config/test_config.py @@ -1494,6 +1494,8 @@ def test_passenv_as_multiline_list(self, newconfig, monkeypatch, plat): monkeypatch.setenv("A123A", "a") monkeypatch.setenv("A123B", "b") monkeypatch.setenv("BX23", "0") + if plat == "linux2": + monkeypatch.setenv("http_proxy", "c") config = newconfig( """ [testenv] @@ -1518,6 +1520,9 @@ def test_passenv_as_multiline_list(self, newconfig, monkeypatch, plat): assert "MSYSTEM" in envconfig.passenv else: assert "TMPDIR" in envconfig.passenv + if sys.platform != "win32": + # this cannot be emulated on win - it doesn't support lowercase env vars + assert "http_proxy" in envconfig.passenv assert "CURL_CA_BUNDLE" in envconfig.passenv assert "PATH" in envconfig.passenv assert "PIP_INDEX_URL" in envconfig.passenv @@ -3575,7 +3580,7 @@ def test_config_via_pyproject_legacy(initproj): initproj( "config_via_pyproject_legacy-0.5", filedefs={ - "pyproject.toml": u''' + "pyproject.toml": ''' [project] description = "Factory ⸻ A code generator 🏭" authors = [{name = "Łukasz Langa"}]