fix(requirements-txt-fixer): keep --index-url before --extra-index-url

This commit is contained in:
Louis Shawn 2026-02-05 21:09:30 +08:00
parent f1dff44d3a
commit 918dc64fe7
2 changed files with 20 additions and 1 deletions

View file

@ -13,6 +13,10 @@ FAIL = 1
class Requirement:
UNTIL_COMPARISON = re.compile(b'={2,3}|!=|~=|>=?|<=?')
UNTIL_SEP = re.compile(rb'[^;\s]+')
_SPECIAL_ORDER = {
b'--index-url': 0,
b'--extra-index-url': 1,
}
def __init__(self) -> None:
self.value: bytes | None = None
@ -50,7 +54,13 @@ class Requirement:
# with comments is kept)
if self.name == requirement.name:
return bool(self.comments) > bool(requirement.comments)
return self.name < requirement.name
return (
self._SPECIAL_ORDER.get(self.name, 2),
self.name,
) < (
self._SPECIAL_ORDER.get(requirement.name, 2),
requirement.name,
)
def is_complete(self) -> bool:
return (

View file

@ -107,6 +107,15 @@ from pre_commit_hooks.requirements_txt_fixer import Requirement
PASS,
b'a=2.0.0 \\\n --hash=sha256:abcd\nb==1.0.0\n',
),
(
b'--extra-index-url https://example.com/simple\n'
b'--index-url https://pypi.org/simple\n'
b'requests\n',
FAIL,
b'--index-url https://pypi.org/simple\n'
b'--extra-index-url https://example.com/simple\n'
b'requests\n',
),
),
)
def test_integration(input_s, expected_retval, output, tmpdir):