annotate Tools/scripts/xxci.py @ 79675:c0a2294de787 2.7

Issue #16199: Backport 2to3 typo fix from 3.2.
author Chris Jerdonek <chris.jerdonek@gmail.com>
date Thu, 11 Oct 2012 16:15:46 -0700
parents 1d84bf5f9478
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4573
73758db2f464 /usr/local/bin/python -> /usr/bin/env python
Guido van Rossum <guido@python.org>
parents: 1506
diff changeset
1 #! /usr/bin/env python
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 # xxci
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 #
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 # check in files for which rcsdiff returns nonzero exit status
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 import sys
755
2dd5dbf28a2d change posix to os
Guido van Rossum <guido@python.org>
parents: 682
diff changeset
8 import os
682
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
9 from stat import *
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
10 import fnmatch
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
11
503
e14d46440ea7 Better check to avoid executables.
Guido van Rossum <guido@python.org>
parents: 299
diff changeset
12 EXECMAGIC = '\001\140\000\010'
e14d46440ea7 Better check to avoid executables.
Guido van Rossum <guido@python.org>
parents: 299
diff changeset
13
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 MAXSIZE = 200*1024 # Files this big must be binaries and are skipped.
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
15
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 def getargs():
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
17 args = sys.argv[1:]
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
18 if args:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
19 return args
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
20 print 'No arguments, checking almost *, in "ls -t" order'
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
21 list = []
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
22 for file in os.listdir(os.curdir):
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
23 if not skipfile(file):
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
24 list.append((getmtime(file), file))
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
25 list.sort()
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
26 if not list:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
27 print 'Nothing to do -- exit 1'
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
28 sys.exit(1)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
29 list.sort()
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
30 list.reverse()
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
31 for mtime, file in list: args.append(file)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
32 return args
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33
682
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
34 def getmtime(file):
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
35 try:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
36 st = os.stat(file)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
37 return st[ST_MTIME]
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
38 except os.error:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
39 return -1
682
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
40
275
80001c023b2b Added to list of bad filenames.
Guido van Rossum <guido@python.org>
parents: 274
diff changeset
41 badnames = ['tags', 'TAGS', 'xyzzy', 'nohup.out', 'core']
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 badprefixes = ['.', ',', '@', '#', 'o.']
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 badsuffixes = \
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
44 ['~', '.a', '.o', '.old', '.bak', '.orig', '.new', '.prev', '.not', \
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
45 '.pyc', '.fdc', '.rgb', '.elc', ',v']
871
22169fcc1182 Change the way ignore is assigned to
Guido van Rossum <guido@python.org>
parents: 755
diff changeset
46 ignore = []
682
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
47
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
48 def setup():
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
49 ignore[:] = badnames
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
50 for p in badprefixes:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
51 ignore.append(p + '*')
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
52 for p in badsuffixes:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
53 ignore.append('*' + p)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
54 try:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
55 f = open('.xxcign', 'r')
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
56 except IOError:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
57 return
25219
8a7a2f1f88f0 Apply diff2.txt from SF patch http://www.python.org/sf/572113
Walter Dörwald <walter@livinglogic.de>
parents: 15930
diff changeset
58 ignore[:] = ignore + f.read().split()
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
59
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 def skipfile(file):
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
61 for p in ignore:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
62 if fnmatch.fnmatch(file, p): return 1
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
63 try:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
64 st = os.lstat(file)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
65 except os.error:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
66 return 1 # Doesn't exist -- skip it
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
67 # Skip non-plain files.
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
68 if not S_ISREG(st[ST_MODE]): return 1
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
69 # Skip huge files -- probably binaries.
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
70 if st[ST_SIZE] >= MAXSIZE: return 1
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
71 # Skip executables
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
72 try:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
73 data = open(file, 'r').read(len(EXECMAGIC))
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
74 if data == EXECMAGIC: return 1
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
75 except:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
76 pass
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
77 return 0
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
78
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
79 def badprefix(file):
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
80 for bad in badprefixes:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
81 if file[:len(bad)] == bad: return 1
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
82 return 0
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
83
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
84 def badsuffix(file):
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
85 for bad in badsuffixes:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
86 if file[-len(bad):] == bad: return 1
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
87 return 0
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
88
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
89 def go(args):
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
90 for file in args:
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
91 print file + ':'
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
92 if differing(file):
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
93 showdiffs(file)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
94 if askyesno('Check in ' + file + ' ? '):
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
95 sts = os.system('rcs -l ' + file) # ignored
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
96 sts = os.system('ci -l ' + file)
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
97
299
f7090f5814c2 Use posix.popen to read output from a command instead if command.get*.
Guido van Rossum <guido@python.org>
parents: 275
diff changeset
98 def differing(file):
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
99 cmd = 'co -p ' + file + ' 2>/dev/null | cmp -s - ' + file
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
100 sts = os.system(cmd)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
101 return sts != 0
755
2dd5dbf28a2d change posix to os
Guido van Rossum <guido@python.org>
parents: 682
diff changeset
102
2dd5dbf28a2d change posix to os
Guido van Rossum <guido@python.org>
parents: 682
diff changeset
103 def showdiffs(file):
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
104 cmd = 'rcsdiff ' + file + ' 2>&1 | ${PAGER-more}'
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
105 sts = os.system(cmd)
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
106
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
107 def askyesno(prompt):
15930
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
108 s = raw_input(prompt)
14a27acc755a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 4573
diff changeset
109 return s in ['y', 'yes']
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
110
33074
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 25219
diff changeset
111 if __name__ == '__main__':
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 25219
diff changeset
112 try:
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 25219
diff changeset
113 setup()
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 25219
diff changeset
114 go(getargs())
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 25219
diff changeset
115 except KeyboardInterrupt:
981fff7363b9 [Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents: 25219
diff changeset
116 print '[Intr]'