fix(deps): support multiple index URLs per line and optimize downgrade check

- Rewrite _split_index_url() to handle multiple --index-url /
  --extra-index-url options on a single requirements.txt line using
  regex-based parsing instead of single split.
- Cache installed_packages snapshot in collect_requirements() to avoid
  repeated subprocess calls during downgrade blacklist checks.
- Add unit tests for multi-URL lines and bare --index-url edge case.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Dr.Lt.Data
2026-02-28 08:46:42 +09:00
co-authored by Claude Opus 4.6
parent da7e6f4454
commit 3d9c9ca8de
2 changed files with 86 additions and 18 deletions
+24
View File
@@ -354,6 +354,30 @@ class TestIndexUrlSeparation:
assert deps.requirements[0].name == "torch"
assert "https://download.pytorch.org/whl/cu121" in deps.extra_index_urls
def test_multiple_index_urls_on_single_line(self, tmp_path):
"""Multiple --extra-index-url / --index-url on the same line."""
p = _make_node_pack(
str(tmp_path), "pack_a",
"torch --extra-index-url https://url1.example.com "
"--index-url https://url2.example.com\n",
)
r = _resolver([p])
deps = r.collect_requirements()
assert len(deps.requirements) == 1
assert deps.requirements[0].name == "torch"
assert "https://url1.example.com" in deps.extra_index_urls
assert "https://url2.example.com" in deps.extra_index_urls
def test_bare_index_url_no_value(self, tmp_path):
"""Bare ``--index-url`` with no URL value must not become a package."""
p = _make_node_pack(str(tmp_path), "pack_a",
"--index-url\nnumpy>=1.20\n")
r = _resolver([p])
deps = r.collect_requirements()
assert len(deps.requirements) == 1
assert deps.requirements[0].name == "numpy"
assert deps.extra_index_urls == []
# ===========================================================================
# Downgrade blacklist