summaryrefslogtreecommitdiffstats
path: root/Tools
diff options
context:
space:
mode:
Diffstat (limited to 'Tools')
-rw-r--r--Tools/scripts/patchcheck.py46
1 files changed, 32 insertions, 14 deletions
diff --git a/Tools/scripts/patchcheck.py b/Tools/scripts/patchcheck.py
index 544b00e..7d001e8 100644
--- a/Tools/scripts/patchcheck.py
+++ b/Tools/scripts/patchcheck.py
@@ -5,6 +5,10 @@ import sys
import reindent
+def n_files_str(count):
+ """Return 'N file(s)' with the proper plurality on 'file'."""
+ return "{} file{}".format(count, "s" if count != 1 else "")
+
def status(message, modal=False, info=None):
"""Decorator to output status info to stdout."""
def decorated_fxn(fxn):
@@ -26,7 +30,7 @@ def status(message, modal=False, info=None):
return decorated_fxn
@status("Getting the list of files that have been added/changed",
- info=lambda x: "%s files" % len(x))
+ info=lambda x: n_files_str(len(x)))
def changed_files():
"""Run ``svn status`` and return a set of files that have been
changed/added."""
@@ -44,20 +48,30 @@ def changed_files():
files.add(path)
return files
-@status("Fixing whitespace", info=lambda x: "%s files" % x)
+def report_modified_files(file_paths):
+ count = len(file_paths)
+ if count == 0:
+ return n_files_str(count)
+ else:
+ lines = ["{}:".format(n_files_str(count))]
+ for path in file_paths:
+ lines.append(" {}".format(path))
+ return "\n".join(lines)
+
+@status("Fixing whitespace", info=report_modified_files)
def normalize_whitespace(file_paths):
"""Make sure that the whitespace for .py files have been normalized."""
reindent.makebackup = False # No need to create backups.
- result = list(map(reindent.check, (x for x in file_paths if x.endswith('.py'))))
- return sum(result)
+ fixed = []
+ for path in (x for x in file_paths if x.endswith('.py')):
+ if reindent.check(path):
+ fixed.append(path)
+ return fixed
@status("Docs modified", modal=True)
def docs_modified(file_paths):
- """Report if any files in the Docs directory."""
- for path in file_paths:
- if path.startswith("Doc"):
- return True
- return False
+ """Report if any file in the Doc directory has been changed."""
+ return bool(file_paths)
@status("Misc/ACKS updated", modal=True)
def credit_given(file_paths):
@@ -72,14 +86,18 @@ def reported_news(file_paths):
def main():
file_paths = changed_files()
- # PEP 7/8 verification.
- normalize_whitespace(file_paths)
+ python_files = [fn for fn in file_paths if fn.endswith('.py')]
+ c_files = [fn for fn in file_paths if fn.endswith(('.c', '.h'))]
+ docs = [fn for fn in file_paths if fn.startswith('Doc')]
+ special_files = {'Misc/ACKS', 'Misc/NEWS'} & set(file_paths)
+ # PEP 8 whitespace rules enforcement.
+ normalize_whitespace(python_files)
# Docs updated.
- docs_modified(file_paths)
+ docs_modified(docs)
# Misc/ACKS changed.
- credit_given(file_paths)
+ credit_given(special_files)
# Misc/NEWS changed.
- reported_news(file_paths)
+ reported_news(special_files)
# Test suite run and passed.
print()