Fix requirements-txt-fixer reordering pip options like --index-url

The requirements-txt-fixer was alphabetically sorting all lines, including
pip options like --index-url and --extra-index-url. This caused
--extra-index-url to be sorted above --index-url, breaking pip's index
resolution order since --index-url must come first.

Fix by preserving the original relative order of lines that start with
`--` (pip options), while still sorting regular package requirements
alphabetically.

Closes #612

Bahtya
This commit is contained in:
Bahtya 2026-04-10 00:13:44 +08:00
parent d1283494cb
commit dfac6b321e
2 changed files with 41 additions and 0 deletions

View file

@ -45,6 +45,14 @@ class Requirement:
elif requirement.value == b'\n':
return False
else:
# if both are pip options (start with --), maintain original
# order to avoid breaking semantic ordering
# (e.g. --index-url must come before --extra-index-url)
if (
self.name.startswith(b'--') and
requirement.name.startswith(b'--')
):
return False
# if 2 requirements have the same name, the one with comments
# needs to go first (so that when removing duplicates, the one
# with comments is kept)