diff --git a/docs/changelog/1777.bugfix.rst b/docs/changelog/1777.bugfix.rst new file mode 100644 index 000000000..d938fbae6 --- /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 7b91250ed..0f6fdbe8c 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 0fd23f4f1..f7fa07b0d 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( """