Mercurial > cpython-lru_cache-weakref
annotate Tools/scripts/patchcheck.py @ 62798:7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
whitespace cleaned up and do the proper plurality for "N file(s)" based on N.
Refactoring closes issue8912. Thanks to Éric Araujo for the patch.
| author | Brett Cannon <bcannon@gmail.com> |
|---|---|
| date | Sun, 04 Jul 2010 22:05:34 +0000 |
| parents | a04b1c7167ba |
| children | 5ae390ac6c61 |
| rev | line source |
|---|---|
|
45865
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1 import os.path |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2 import subprocess |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
3 import sys |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
4 |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
5 import reindent |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
6 |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
7 |
|
62798
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
8 def n_files_str(count): |
|
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
9 """Return 'N file(s)' with the proper plurality on 'file'.""" |
|
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
10 return "{} file{}".format(count, "s" if count != 1 else "") |
|
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
11 |
|
45865
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
12 def status(message, modal=False, info=None): |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
13 """Decorator to output status info to stdout.""" |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
14 def decorated_fxn(fxn): |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
15 def call_fxn(*args, **kwargs): |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
16 sys.stdout.write(message + ' ... ') |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
17 sys.stdout.flush() |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
18 result = fxn(*args, **kwargs) |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
19 if not modal and not info: |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
20 print("done") |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
21 elif info: |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
22 print(info(result)) |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
23 else: |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
24 if result: |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
25 print("yes") |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
26 else: |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
27 print("NO") |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
28 return result |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
29 return call_fxn |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
30 return decorated_fxn |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
31 |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
32 @status("Getting the list of files that have been added/changed", |
|
62798
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
33 info=lambda x: n_files_str(len(x))) |
|
45865
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
34 def changed_files(): |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
35 """Run ``svn status`` and return a set of files that have been |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
36 changed/added.""" |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
37 cmd = 'svn status --quiet --non-interactive --ignore-externals' |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
38 svn_st = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE) |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
39 svn_st.wait() |
|
45883
fa70e6ae831a
Convert the input from stdout to text.
Brett Cannon <bcannon@gmail.com>
parents:
45865
diff
changeset
|
40 output = [x.decode().rstrip() for x in svn_st.stdout.readlines()] |
|
45865
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
41 files = set() |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
42 for line in output: |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
43 if not line[0] in ('A', 'M'): |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
44 continue |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
45 line_parts = line.split() |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
46 path = line_parts[-1] |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
47 if os.path.isfile(path): |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
48 files.add(path) |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
49 return files |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
50 |
|
62798
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
51 def report_modified_files(file_paths): |
|
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
52 count = len(file_paths) |
|
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
53 if count == 0: |
|
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
54 return n_files_str(count) |
|
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
55 else: |
|
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
56 lines = ["{}:".format(n_files_str(count))] |
|
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
57 for path in file_paths: |
|
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
58 lines.append(" {}".format(path)) |
|
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
59 return "\n".join(lines) |
|
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
60 |
|
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
61 @status("Fixing whitespace", info=report_modified_files) |
|
45865
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
62 def normalize_whitespace(file_paths): |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
63 """Make sure that the whitespace for .py files have been normalized.""" |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
64 reindent.makebackup = False # No need to create backups. |
|
62798
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
65 fixed = [] |
|
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
66 for path in (x for x in file_paths if x.endswith('.py')): |
|
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
67 if reindent.check(path): |
|
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
68 fixed.append(path) |
|
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
69 return fixed |
|
45865
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
70 |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
71 @status("Docs modified", modal=True) |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
72 def docs_modified(file_paths): |
|
62798
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
73 """Report if any file in the Doc directory has been changed.""" |
|
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
74 return bool(file_paths) |
|
45865
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
75 |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
76 @status("Misc/ACKS updated", modal=True) |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
77 def credit_given(file_paths): |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
78 """Check if Misc/ACKS has been changed.""" |
|
50812
a04b1c7167ba
Merged revisions 68630 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
45883
diff
changeset
|
79 return 'Misc/ACKS' in file_paths |
|
45865
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
80 |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
81 @status("Misc/NEWS updated", modal=True) |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
82 def reported_news(file_paths): |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
83 """Check if Misc/NEWS has been changed.""" |
|
50812
a04b1c7167ba
Merged revisions 68630 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
45883
diff
changeset
|
84 return 'Misc/NEWS' in file_paths |
|
45865
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
85 |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
86 |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
87 def main(): |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
88 file_paths = changed_files() |
|
62798
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
89 python_files = [fn for fn in file_paths if fn.endswith('.py')] |
|
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
90 c_files = [fn for fn in file_paths if fn.endswith(('.c', '.h'))] |
|
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
91 docs = [fn for fn in file_paths if fn.startswith('Doc')] |
|
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
92 special_files = {'Misc/ACKS', 'Misc/NEWS'} & set(file_paths) |
|
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
93 # PEP 8 whitespace rules enforcement. |
|
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
94 normalize_whitespace(python_files) |
|
45865
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
95 # Docs updated. |
|
62798
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
96 docs_modified(docs) |
|
45865
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
97 # Misc/ACKS changed. |
|
62798
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
98 credit_given(special_files) |
|
45865
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
99 # Misc/NEWS changed. |
|
62798
7ffd2a44942c
Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents:
50812
diff
changeset
|
100 reported_news(special_files) |
|
45865
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
101 |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
102 # Test suite run and passed. |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
103 print() |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
104 print("Did you run the test suite?") |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
105 |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
106 |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
107 if __name__ == '__main__': |
|
e0e8bef0d5ec
Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
108 main() |
