From c58ae08fed9e686bc8434372ac97355226a6a78d Mon Sep 17 00:00:00 2001 From: Vinay Karanam Date: Sun, 3 Jul 2016 04:10:20 +0530 Subject: [PATCH] requirements fixer output is similar to pip freeze --- pre_commit_hooks/requirements_txt_fixer.py | 18 ++++++++++++++---- tests/requirements_txt_fixer_test.py | 1 + 2 files changed, 15 insertions(+), 4 deletions(-) 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 @@ class Requirement(object): 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 @@ class Requirement(object): 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 @@ TESTS = ( (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'), )