From da140fba1662e262f05b5e571bf3e6028fc45d86 Mon Sep 17 00:00:00 2001 From: John Vandenberg Date: Mon, 11 Jan 2021 15:04:57 +0800 Subject: [PATCH] Partial revert of e4d0d600, fixing #1777 (#1794) --- docs/changelog/1777.bugfix.rst | 1 + src/tox/config/__init__.py | 6 ++++++ tests/unit/config/test_config.py | 20 ++++++++++++++++++++ 3 files changed, 27 insertions(+) create mode 100644 docs/changelog/1777.bugfix.rst diff --git a/docs/changelog/1777.bugfix.rst b/docs/changelog/1777.bugfix.rst new file mode 100644 index 0000000000..d938fbae6f --- /dev/null +++ b/docs/changelog/1777.bugfix.rst @@ -0,0 +1 @@ +Fix regression that broke using install_command in config replacements - by :user:`jayvdb` diff --git a/src/tox/config/__init__.py b/src/tox/config/__init__.py index 7b91250ed4..0f6fdbe8cc 100644 --- a/src/tox/config/__init__.py +++ b/src/tox/config/__init__.py @@ -1848,6 +1848,12 @@ def _replace_match(self, match): return os.pathsep default_value = g["default_value"] + # special case: opts and packages. Leave {opts} and + # {packages} intact, they are replaced manually in + # _venv.VirtualEnv.run_install_command. + if sub_value in ("opts", "packages"): + return "{{{}}}".format(sub_value) + if sub_value == "posargs": return self.reader.getposargs(default_value) diff --git a/tests/unit/config/test_config.py b/tests/unit/config/test_config.py index 0fd23f4f12..f7fa07b0dd 100644 --- a/tests/unit/config/test_config.py +++ b/tests/unit/config/test_config.py @@ -1627,6 +1627,26 @@ def test_install_command_substitutions(self, newconfig): ] assert envconfig.install_command == expected_deps + def test_install_command_substitutions_other_section(self, newconfig): + config = newconfig( + """ + [base] + install_command=some_install --arg={toxinidir}/foo \ + {envname} {opts} {packages} + [testenv] + install_command={[base]install_command} + """, + ) + envconfig = config.envconfigs["python"] + expected_deps = [ + "some_install", + "--arg={}/foo".format(config.toxinidir), + "python", + "{opts}", + "{packages}", + ] + assert envconfig.install_command == expected_deps + def test_pip_pre(self, newconfig): config = newconfig( """