requirements fixer output is similar to pip freeze
diff --git a/pre_commit_hooks/requirements_txt_fixer.py b/pre_commit_hooks/requirements_txt_fixer.py index bf7f75d..c64b0a2 100644 --- a/pre_commit_hooks/requirements_txt_fixer.py +++ b/pre_commit_hooks/requirements_txt_fixer.py
@@ -10,6 +10,19 @@ self.value = None self.comments = [] + @property + def name(self): + if self.value is None: + return + + if self.value == b'\n': + return + + if self.value.startswith(b'-e '): + return self.value.lower().partition(b'=')[-1] + + return self.value.lower().partition(b'==')[0] + def __lt__(self, requirement): # \n means top of file comment, so always return True, # otherwise just do a string comparison with value. @@ -18,10 +31,7 @@ elif requirement.value == b'\n': return False else: - return ( - self.value.lower().partition(b'==') < - requirement.value.lower().partition(b'==') - ) + return self.name < requirement.name def fix_requirements(f):
diff --git a/tests/requirements_txt_fixer_test.py b/tests/requirements_txt_fixer_test.py index fe51f4a..1c590a5 100644 --- a/tests/requirements_txt_fixer_test.py +++ b/tests/requirements_txt_fixer_test.py
@@ -15,6 +15,7 @@ (b'\nbar\nfoo\n', 0, b'\nbar\nfoo\n'), (b'pyramid==1\npyramid-foo==2\n', 0, b'pyramid==1\npyramid-foo==2\n'), (b'ocflib\nDjango\nPyMySQL\n', 1, b'Django\nocflib\nPyMySQL\n'), + (b'-e git+ssh://git_url@tag#egg=ocflib\nDjango\nPyMySQL\n', 1, b'Django\n-e git+ssh://git_url@tag#egg=ocflib\nPyMySQL\n'), )