From 196b20de4c969a163d34692d8a5d646cad4717d6 Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Sat, 31 Dec 2022 03:26:40 +0300 Subject: [PATCH] Fix extracting extras from markers with many extras (#2792) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Bernát Gábor --- docs/changelog/2791.bugfix.rst | 1 + src/tox/tox_env/python/virtual_env/package/util.py | 3 +-- .../python/virtual_env/package/test_python_package_util.py | 6 ++++++ 3 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 docs/changelog/2791.bugfix.rst diff --git a/docs/changelog/2791.bugfix.rst b/docs/changelog/2791.bugfix.rst new file mode 100644 index 000000000..172874be5 --- /dev/null +++ b/docs/changelog/2791.bugfix.rst @@ -0,0 +1 @@ +Fix extracting extras from markers with many extras - by :user:`q0w`. diff --git a/src/tox/tox_env/python/virtual_env/package/util.py b/src/tox/tox_env/python/virtual_env/package/util.py index 5139e7bac..e57efee97 100644 --- a/src/tox/tox_env/python/virtual_env/package/util.py +++ b/src/tox/tox_env/python/virtual_env/package/util.py @@ -45,10 +45,9 @@ def extract_extra_markers(deps: list[Requirement]) -> list[tuple[Requirement, se extra_markers.add(marker_value.value) del markers[_at] _at -= 1 - if _at > 0 and (isinstance(markers[_at], str) and markers[_at] in ("and", "or")): + if _at >= 0 and (isinstance(markers[_at], str) and markers[_at] in ("and", "or")): del markers[_at] if len(markers) == 0: req.marker = None - break result.append((req, extra_markers or {None})) return result diff --git a/tests/tox_env/python/virtual_env/package/test_python_package_util.py b/tests/tox_env/python/virtual_env/package/test_python_package_util.py index bac77d8f7..5cb188128 100644 --- a/tests/tox_env/python/virtual_env/package/test_python_package_util.py +++ b/tests/tox_env/python/virtual_env/package/test_python_package_util.py @@ -63,3 +63,9 @@ def test_loads_deps_recursive_extras() -> None: ] result = dependencies_with_extras(requires, {"dev"}, "name") assert [str(i) for i in result] == ["no-extra", "dep1[magic]", "dep1", "dep2[a,b]"] + + +def test_load_dependency_requirement_or_extras() -> None: + requires = [Requirement('filelock<4.0.0,>=3.9.0; extra == "extras1" or extra == "extras2"')] + result = dependencies_with_extras(requires, {"extras1"}, "") + assert [str(r) for r in result] == ["filelock<4.0.0,>=3.9.0"]