diff options
Diffstat (limited to 'utils/checkstyle.py')
-rwxr-xr-x | utils/checkstyle.py | 48 |
1 files changed, 31 insertions, 17 deletions
diff --git a/utils/checkstyle.py b/utils/checkstyle.py index 4a14309f..d928a5f3 100755 --- a/utils/checkstyle.py +++ b/utils/checkstyle.py @@ -458,12 +458,33 @@ class StripTrailingSpaceFormatter(Formatter): # Style checking # +class Commit: + def __init__(self, commit): + self.commit = commit + + def get_info(self): + # Get the commit title and list of files. + ret = subprocess.run(['git', 'show', '--pretty=oneline', '--name-only', + self.commit], + stdout=subprocess.PIPE).stdout.decode('utf-8') + files = ret.splitlines() + # Returning title and files list as a tuple + return files[0], files[1:] + + def get_diff(self, top_level, filename): + return subprocess.run(['git', 'diff', '%s~..%s' % (self.commit, self.commit), + '--', '%s/%s' % (top_level, filename)], + stdout=subprocess.PIPE).stdout.decode('utf-8') + + def get_file(self, filename): + return subprocess.run(['git', 'show', '%s:%s' % (self.commit, filename)], + stdout=subprocess.PIPE).stdout.decode('utf-8') + + def check_file(top_level, commit, filename): # Extract the line numbers touched by the commit. - diff = subprocess.run(['git', 'diff', '%s~..%s' % (commit, commit), '--', - '%s/%s' % (top_level, filename)], - stdout=subprocess.PIPE).stdout - diff = diff.decode('utf-8').splitlines(True) + diff = commit.get_diff(top_level, filename) + diff = diff.splitlines(True) commit_diff = parse_diff(diff) lines = [] @@ -476,9 +497,7 @@ def check_file(top_level, commit, filename): # Format the file after the commit with all formatters and compute the diff # between the unformatted and formatted contents. - after = subprocess.run(['git', 'show', '%s:%s' % (commit, filename)], - stdout=subprocess.PIPE).stdout - after = after.decode('utf-8') + after = commit.get_file(filename) formatted = after for formatter in Formatter.formatters(filename): @@ -522,12 +541,7 @@ def check_file(top_level, commit, filename): def check_style(top_level, commit): - # Get the commit title and list of files. - ret = subprocess.run(['git', 'show', '--pretty=oneline','--name-only', commit], - stdout=subprocess.PIPE) - files = ret.stdout.decode('utf-8').splitlines() - title = files[0] - files = files[1:] + title, files = commit.get_info() separator = '-' * len(title) print(separator) @@ -557,7 +571,7 @@ def check_style(top_level, commit): return issues -def extract_revlist(revs): +def extract_commits(revs): """Extract a list of commits on which to operate from a revision or revision range. """ @@ -576,7 +590,7 @@ def extract_revlist(revs): revlist = ret.stdout.decode('utf-8').splitlines() revlist.reverse() - return revlist + return [Commit(x) for x in revlist] def git_top_level(): @@ -632,10 +646,10 @@ def main(argv): if top_level is None: return 1 - revlist = extract_revlist(args.revision_range) + commits = extract_commits(args.revision_range) issues = 0 - for commit in revlist: + for commit in commits: issues += check_style(top_level, commit) print('') |