summaryrefslogtreecommitdiffstats
path: root/Tools/scripts/xxci.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1991-06-04 20:36:54 (GMT)
committerGuido van Rossum <guido@python.org>1991-06-04 20:36:54 (GMT)
commitec758ead391daa2ce0e5697aa0e67ec3ba0f37af (patch)
tree7f2d186afd41d797882d5b5be3330e921804ebe9 /Tools/scripts/xxci.py
parent0481447f4135c11d42ae25f55696af8e8d52fe74 (diff)
downloadcpython-ec758ead391daa2ce0e5697aa0e67ec3ba0f37af.zip
cpython-ec758ead391daa2ce0e5697aa0e67ec3ba0f37af.tar.gz
cpython-ec758ead391daa2ce0e5697aa0e67ec3ba0f37af.tar.bz2
Initial revision
Diffstat (limited to 'Tools/scripts/xxci.py')
-rwxr-xr-xTools/scripts/xxci.py77
1 files changed, 77 insertions, 0 deletions
diff --git a/Tools/scripts/xxci.py b/Tools/scripts/xxci.py
new file mode 100755
index 0000000..e747c8d
--- /dev/null
+++ b/Tools/scripts/xxci.py
@@ -0,0 +1,77 @@
+#! /usr/local/python
+
+# xxci
+#
+# check in files for which rcsdiff returns nonzero exit status
+
+import sys
+import posix
+import stat
+import path
+import commands
+
+MAXSIZE = 200*1024 # Files this big must be binaries and are skipped.
+
+def getargs():
+ args = sys.argv[1:]
+ if args:
+ return args
+ print 'No arguments, checking almost *'
+ for file in posix.listdir('.'):
+ if not skipfile(file):
+ args.append(file)
+ if not args:
+ print 'Nothing to do -- exit 1'
+ sys.exit(1)
+ args.sort()
+ return args
+
+badnames = ['tags', 'xyzzy']
+badprefixes = ['.', ',', '@', '#', 'o.']
+badsuffixes = \
+ ['~', '.a', '.o', '.old', '.bak', '.orig', '.new', '.prev', '.not']
+# XXX Should generalize even more to use fnmatch!
+
+def skipfile(file):
+ if file in badnames or \
+ badprefix(file) or badsuffix(file) or \
+ path.islink(file) or path.isdir(file):
+ return 1
+ # Skip huge files -- probably binaries.
+ try:
+ st = posix.stat(file)
+ except posix.error:
+ return 1 # Doesn't exist -- skip it
+ return st[stat.ST_SIZE] >= MAXSIZE
+
+def badprefix(file):
+ for bad in badprefixes:
+ if file[:len(bad)] = bad: return 1
+ return 0
+
+def badsuffix(file):
+ for bad in badsuffixes:
+ if file[-len(bad):] = bad: return 1
+ return 0
+
+def go(args):
+ for file in args:
+ print file + ':'
+ if run('rcsdiff -c', file):
+ if askyesno('Check in ' + file + ' ? '):
+ sts = run('rcs -l', file) # ignored
+ # can't use run() here because it's interactive
+ sts = posix.system('ci -l ' + file)
+
+def run(cmd, file):
+ sts, output = commands.getstatusoutput(cmd + commands.mkarg(file))
+ if sts:
+ print output
+ print 'Exit status', sts
+ return sts
+
+def askyesno(prompt):
+ s = raw_input(prompt)
+ return s in ['y', 'yes']
+
+go(getargs())