diff --git a/docs/changelog/2682.bugfix.rst b/docs/changelog/2682.bugfix.rst new file mode 100644 index 000000000..a2c0f9ae3 --- /dev/null +++ b/docs/changelog/2682.bugfix.rst @@ -0,0 +1 @@ +Fix regression in ``requirements.txt`` parsing - by :user:`gaborbernat`. diff --git a/src/tox/tox_env/python/pip/req_file.py b/src/tox/tox_env/python/pip/req_file.py index 9a7da5468..f45a851ae 100644 --- a/src/tox/tox_env/python/pip/req_file.py +++ b/src/tox/tox_env/python/pip/req_file.py @@ -19,11 +19,11 @@ def __init__(self, raw: str, root: Path): self._req_parser_: RequirementsFile | None = None def _extend_parser(self, parser: ArgumentParser) -> None: - parser.add_argument("--no-deps", action="store_true", default=False) + parser.add_argument("--no-deps", action="store_true", dest="no_deps", default=False) def _merge_option_line(self, base_opt: Namespace, opt: Namespace, filename: str) -> None: super()._merge_option_line(base_opt, opt, filename) - if opt.no_deps: + if getattr(opt, "no_deps", False): # if the option comes from a requirements file this flag is missing there base_opt.no_deps = True def _option_to_args(self, opt: Namespace) -> list[str]: diff --git a/tests/tox_env/python/pip/test_req_file.py b/tests/tox_env/python/pip/test_req_file.py index 4e9dadb4d..b74dc1499 100644 --- a/tests/tox_env/python/pip/test_req_file.py +++ b/tests/tox_env/python/pip/test_req_file.py @@ -1,5 +1,6 @@ from __future__ import annotations +from argparse import Namespace from pathlib import Path import pytest @@ -58,3 +59,11 @@ def test_req_with_no_deps(tmp_path: Path) -> None: python_deps = PythonDeps(raw="-rr.txt", root=tmp_path) with pytest.raises(ValueError, match="unrecognized arguments: --no-deps"): python_deps.requirements + + +def test_opt_only_req_file(tmp_path: Path) -> None: + """deps with --hash should raise an exception.""" + (tmp_path / "r.txt").write_text("--use-feature fast-deps") + python_deps = PythonDeps(raw="-rr.txt", root=tmp_path) + assert not python_deps.requirements + assert python_deps.options == Namespace(features_enabled=["fast-deps"])