annotate Tools/scripts/patchcheck.py @ 65105:8bcbdd6730a7

#10034: import readline in longer example.
author Georg Brandl <georg@python.org>
date Wed, 06 Oct 2010 05:08:32 +0000
parents 5ae390ac6c61
children 2e19d1f4b612
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
63872
5ae390ac6c61 Clean up syntax for some scripts.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 62798
diff changeset
12
45865
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
13 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
14 """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
15 def decorated_fxn(fxn):
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
16 def call_fxn(*args, **kwargs):
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
17 sys.stdout.write(message + ' ... ')
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
18 sys.stdout.flush()
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
19 result = fxn(*args, **kwargs)
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
20 if not modal and not info:
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
21 print("done")
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
22 elif info:
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
23 print(info(result))
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
24 else:
63872
5ae390ac6c61 Clean up syntax for some scripts.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 62798
diff changeset
25 print("yes" if result else "NO")
45865
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
26 return result
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
27 return call_fxn
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
28 return decorated_fxn
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
29
63872
5ae390ac6c61 Clean up syntax for some scripts.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 62798
diff changeset
30
45865
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
31 @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
32 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
33 def changed_files():
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
34 """Run ``svn status`` and return a set of files that have been
63872
5ae390ac6c61 Clean up syntax for some scripts.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 62798
diff changeset
35 changed/added.
5ae390ac6c61 Clean up syntax for some scripts.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 62798
diff changeset
36 """
45865
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()
63872
5ae390ac6c61 Clean up syntax for some scripts.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 62798
diff changeset
40 output = (x.decode().rstrip().rsplit(None, 1)[-1]
5ae390ac6c61 Clean up syntax for some scripts.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 62798
diff changeset
41 for x in svn_st.stdout if x[0] in b'AM')
5ae390ac6c61 Clean up syntax for some scripts.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 62798
diff changeset
42 return set(path for path in output if os.path.isfile(path))
5ae390ac6c61 Clean up syntax for some scripts.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 62798
diff changeset
43
45865
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
44
62798
7ffd2a44942c Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents: 50812
diff changeset
45 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
46 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
47 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
48 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
49 else:
7ffd2a44942c Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents: 50812
diff changeset
50 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
51 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
52 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
53 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
54
63872
5ae390ac6c61 Clean up syntax for some scripts.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 62798
diff changeset
55
62798
7ffd2a44942c Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents: 50812
diff changeset
56 @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
57 def normalize_whitespace(file_paths):
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
58 """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
59 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
60 fixed = []
7ffd2a44942c Do some basic refactoring. Along the way also list what files had their
Brett Cannon <bcannon@gmail.com>
parents: 50812
diff changeset
61 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
62 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
63 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
64 return fixed
45865
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
65
63872
5ae390ac6c61 Clean up syntax for some scripts.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 62798
diff changeset
66
45865
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
67 @status("Docs modified", modal=True)
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
68 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
69 """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
70 return bool(file_paths)
45865
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
71
63872
5ae390ac6c61 Clean up syntax for some scripts.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 62798
diff changeset
72
45865
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
73 @status("Misc/ACKS updated", modal=True)
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
74 def credit_given(file_paths):
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
75 """Check if Misc/ACKS has been changed."""
50812
a04b1c7167ba Merged revisions 68630 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45883
diff changeset
76 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
77
63872
5ae390ac6c61 Clean up syntax for some scripts.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 62798
diff changeset
78
45865
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
79 @status("Misc/NEWS updated", modal=True)
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
80 def reported_news(file_paths):
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
81 """Check if Misc/NEWS has been changed."""
50812
a04b1c7167ba Merged revisions 68630 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45883
diff changeset
82 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
83
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
84
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
85 def main():
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
86 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
87 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
88 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
89 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
90 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
91 # 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
92 normalize_whitespace(python_files)
45865
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
93 # 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
94 docs_modified(docs)
45865
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
95 # 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
96 credit_given(special_files)
45865
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
97 # 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
98 reported_news(special_files)
45865
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
99
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
100 # Test suite run and passed.
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
101 print()
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
102 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
103
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
104
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
105 if __name__ == '__main__':
e0e8bef0d5ec Merged revisions 61520,61523-61528,61532 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
106 main()