From 0e1fea2fb3cf33b25f57e71c4390a01d1c134780 Mon Sep 17 00:00:00 2001 From: Ganesh Kathiresan Date: Tue, 16 Feb 2021 13:20:59 +0530 Subject: ENH: Added Linter script --- tools/linter.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 tools/linter.py (limited to 'tools/linter.py') diff --git a/tools/linter.py b/tools/linter.py new file mode 100644 index 000000000..f0c2b7927 --- /dev/null +++ b/tools/linter.py @@ -0,0 +1,52 @@ +import os +import sys +import subprocess +from argparse import ArgumentParser +from git import Repo + +BASE_BRANCH = 'master' +CONFIG = os.path.join( + os.path.abspath(os.path.dirname(__file__)), + 'lint_diff.ini', +) + + +class DiffLinter: + def __init__(self, branch): + self.branch = branch + self.repo = Repo('.') + + def get_branch_diff(self): + commit = self.repo.merge_base(BASE_BRANCH, self.branch)[0] + diff = self.repo.git.diff(commit, self.branch, '*.py') + return diff + + def run_pycodestyle(self, diff): + """ + Original Author: Josh Wilson (@person142) + Source: https://github.com/scipy/scipy/blob/master/tools/lint_diff.py + Run pycodestyle on the given diff. + """ + res = subprocess.run( + ['pycodestyle', '--diff', '--config', CONFIG], + input=diff, + stdout=subprocess.PIPE, + encoding='utf-8', + ) + return res.returncode, res.stdout + + def run_lint(self): + diff = self.get_branch_diff() + retcode, errors = self.run_pycodestyle(diff) + + errors and print(errors) + + sys.exit(retcode) + +if __name__ == '__main__': + parser = ArgumentParser() + parser.add_argument("--branch", type=str, default='master', + help="The branch to diff against") + args = parser.parse_args() + + DiffLinter(args.branch).run_lint() -- cgit v1.2.1 From 37ce99a4ab6f066f1363c33d1ec6f2b4c6c4a583 Mon Sep 17 00:00:00 2001 From: Ganesh Kathiresan Date: Tue, 16 Feb 2021 13:34:59 +0530 Subject: ENH: Added uncommitted changes support --- tools/linter.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'tools/linter.py') diff --git a/tools/linter.py b/tools/linter.py index f0c2b7927..509e199d8 100644 --- a/tools/linter.py +++ b/tools/linter.py @@ -16,15 +16,20 @@ class DiffLinter: self.branch = branch self.repo = Repo('.') - def get_branch_diff(self): + def get_branch_diff(self, uncommitted): commit = self.repo.merge_base(BASE_BRANCH, self.branch)[0] - diff = self.repo.git.diff(commit, self.branch, '*.py') + + if uncommitted: + diff = self.repo.git.diff(self.branch, '***.py') + else: + diff = self.repo.git.diff(commit, self.branch, '***.py') return diff def run_pycodestyle(self, diff): """ Original Author: Josh Wilson (@person142) - Source: https://github.com/scipy/scipy/blob/master/tools/lint_diff.py + Source: + https://github.com/scipy/scipy/blob/master/tools/lint_diff.py Run pycodestyle on the given diff. """ res = subprocess.run( @@ -35,18 +40,21 @@ class DiffLinter: ) return res.returncode, res.stdout - def run_lint(self): - diff = self.get_branch_diff() + def run_lint(self, uncommitted): + diff = self.get_branch_diff(uncommitted) retcode, errors = self.run_pycodestyle(diff) errors and print(errors) sys.exit(retcode) + if __name__ == '__main__': parser = ArgumentParser() parser.add_argument("--branch", type=str, default='master', help="The branch to diff against") + parser.add_argument("--uncommitted", action='store_true', + help="Check only uncommitted changes") args = parser.parse_args() - DiffLinter(args.branch).run_lint() + DiffLinter(args.branch).run_lint(args.uncommitted) -- cgit v1.2.1 From 8e51b5b512a284cd580fdcdfff3cfbe556f013ac Mon Sep 17 00:00:00 2001 From: Ganesh Kathiresan Date: Tue, 16 Feb 2021 14:40:51 +0530 Subject: MAINT: Added exception handling and docs --- tools/linter.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'tools/linter.py') diff --git a/tools/linter.py b/tools/linter.py index 509e199d8..bd54097e3 100644 --- a/tools/linter.py +++ b/tools/linter.py @@ -2,7 +2,7 @@ import os import sys import subprocess from argparse import ArgumentParser -from git import Repo +from git import Repo, exc BASE_BRANCH = 'master' CONFIG = os.path.join( @@ -16,8 +16,18 @@ class DiffLinter: self.branch = branch self.repo = Repo('.') - def get_branch_diff(self, uncommitted): - commit = self.repo.merge_base(BASE_BRANCH, self.branch)[0] + def get_branch_diff(self, uncommitted = False): + """ + Determine the first common ancestor commit. + Find diff between branch and FCA commit. + Note: if `uncommitted` is set, check only + uncommitted changes + """ + try: + commit = self.repo.merge_base(BASE_BRANCH, self.branch)[0] + except exc.GitCommandError: + print(f"Branch with name `{self.branch}` does not exist") + sys.exit(1) if uncommitted: diff = self.repo.git.diff(self.branch, '***.py') -- cgit v1.2.1 From 135963d9dc839456873f87e0a0d94fa37990ca9c Mon Sep 17 00:00:00 2001 From: Ganesh Kathiresan Date: Tue, 16 Feb 2021 20:19:40 +0530 Subject: MAINT: Changed branch argument to take target branch --- tools/linter.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'tools/linter.py') diff --git a/tools/linter.py b/tools/linter.py index bd54097e3..68d869367 100644 --- a/tools/linter.py +++ b/tools/linter.py @@ -4,7 +4,6 @@ import subprocess from argparse import ArgumentParser from git import Repo, exc -BASE_BRANCH = 'master' CONFIG = os.path.join( os.path.abspath(os.path.dirname(__file__)), 'lint_diff.ini', @@ -15,6 +14,7 @@ class DiffLinter: def __init__(self, branch): self.branch = branch self.repo = Repo('.') + self.head = self.repo.head.commit def get_branch_diff(self, uncommitted = False): """ @@ -24,15 +24,15 @@ class DiffLinter: uncommitted changes """ try: - commit = self.repo.merge_base(BASE_BRANCH, self.branch)[0] + commit = self.repo.merge_base(self.branch, self.head)[0] except exc.GitCommandError: print(f"Branch with name `{self.branch}` does not exist") sys.exit(1) if uncommitted: - diff = self.repo.git.diff(self.branch, '***.py') + diff = self.repo.git.diff(self.head, '***.py') else: - diff = self.repo.git.diff(commit, self.branch, '***.py') + diff = self.repo.git.diff(commit, self.head, '***.py') return diff def run_pycodestyle(self, diff): -- cgit v1.2.1 From 11cfa1c942ce2ed3d0e08ab50eb1612bb51ec60e Mon Sep 17 00:00:00 2001 From: Ganesh Kathiresan Date: Mon, 22 Feb 2021 21:46:24 +0530 Subject: ENH, MAINT: Added runtest options | Added unified diff --- tools/linter.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'tools/linter.py') diff --git a/tools/linter.py b/tools/linter.py index 68d869367..f51a8848b 100644 --- a/tools/linter.py +++ b/tools/linter.py @@ -30,9 +30,10 @@ class DiffLinter: sys.exit(1) if uncommitted: - diff = self.repo.git.diff(self.head, '***.py') + diff = self.repo.git.diff(self.head, '--unified=0', '***.py') else: - diff = self.repo.git.diff(commit, self.head, '***.py') + diff = self.repo.git.diff(commit, self.head, + '--unified=0', '***.py') return diff def run_pycodestyle(self, diff): -- cgit v1.2.1 From eb9bc0e8e564f39c7f9167b731ed12b21f5205a7 Mon Sep 17 00:00:00 2001 From: Ganesh Kathiresan Date: Sun, 7 Mar 2021 11:02:02 +0530 Subject: MAINT: Replaced master with main --- tools/linter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tools/linter.py') diff --git a/tools/linter.py b/tools/linter.py index f51a8848b..2952e91ed 100644 --- a/tools/linter.py +++ b/tools/linter.py @@ -62,7 +62,7 @@ class DiffLinter: if __name__ == '__main__': parser = ArgumentParser() - parser.add_argument("--branch", type=str, default='master', + parser.add_argument("--branch", type=str, default='main', help="The branch to diff against") parser.add_argument("--uncommitted", action='store_true', help="Check only uncommitted changes") -- cgit v1.2.1