annotate Tools/scripts/xxci.py @ 4566:6403c94de50d legacy-trunk

Added safeguard against failure in __del__.
author Guido van Rossum <guido@python.org>
date Wed, 27 Nov 1996 19:39:58 +0000
parents ef082c1072a7
children 73758db2f464
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1103
fcaafd5ec695 Friendlier response to interrupt. Use /usr/local/*bin*/python.
Guido van Rossum <guido@python.org>
parents: 1077
diff changeset
1 #! /usr/local/bin/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 *
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 import commands
682
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
11 import fnmatch
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
12 import string
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
13
503
e14d46440ea7 Better check to avoid executables.
Guido van Rossum <guido@python.org>
parents: 299
diff changeset
14 EXECMAGIC = '\001\140\000\010'
e14d46440ea7 Better check to avoid executables.
Guido van Rossum <guido@python.org>
parents: 299
diff changeset
15
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 MAXSIZE = 200*1024 # Files this big must be binaries and are skipped.
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
17
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 def getargs():
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 args = sys.argv[1:]
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 if args:
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 return args
682
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
22 print 'No arguments, checking almost *, in "ls -t" order'
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
23 list = []
755
2dd5dbf28a2d change posix to os
Guido van Rossum <guido@python.org>
parents: 682
diff changeset
24 for file in os.listdir(os.curdir):
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 if not skipfile(file):
682
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
26 list.append((getmtime(file), file))
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
27 list.sort()
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
28 if not list:
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 print 'Nothing to do -- exit 1'
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 sys.exit(1)
682
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
31 list.sort()
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
32 list.reverse()
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
33 for mtime, file in list: args.append(file)
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 return args
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35
682
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
36 def getmtime(file):
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
37 try:
755
2dd5dbf28a2d change posix to os
Guido van Rossum <guido@python.org>
parents: 682
diff changeset
38 st = os.stat(file)
682
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
39 return st[ST_MTIME]
755
2dd5dbf28a2d change posix to os
Guido van Rossum <guido@python.org>
parents: 682
diff changeset
40 except os.error:
682
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
41 return -1
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
42
275
80001c023b2b Added to list of bad filenames.
Guido van Rossum <guido@python.org>
parents: 274
diff changeset
43 badnames = ['tags', 'TAGS', 'xyzzy', 'nohup.out', 'core']
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 badprefixes = ['.', ',', '@', '#', 'o.']
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 badsuffixes = \
503
e14d46440ea7 Better check to avoid executables.
Guido van Rossum <guido@python.org>
parents: 299
diff changeset
46 ['~', '.a', '.o', '.old', '.bak', '.orig', '.new', '.prev', '.not', \
1300
c64af5671cc6 Ignore ,v files too
Guido van Rossum <guido@python.org>
parents: 1103
diff changeset
47 '.pyc', '.fdc', '.rgb', '.elc', ',v']
871
22169fcc1182 Change the way ignore is assigned to
Guido van Rossum <guido@python.org>
parents: 755
diff changeset
48 ignore = []
682
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
49
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
50 def setup():
871
22169fcc1182 Change the way ignore is assigned to
Guido van Rossum <guido@python.org>
parents: 755
diff changeset
51 ignore[:] = badnames
682
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
52 for p in badprefixes:
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
53 ignore.append(p + '*')
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
54 for p in badsuffixes:
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
55 ignore.append('*' + p)
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
56 try:
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
57 f = open('.xxcign', 'r')
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
58 except IOError:
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
59 return
871
22169fcc1182 Change the way ignore is assigned to
Guido van Rossum <guido@python.org>
parents: 755
diff changeset
60 ignore[:] = ignore + string.split(f.read())
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
61
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 def skipfile(file):
682
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
63 for p in ignore:
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
64 if fnmatch.fnmatch(file, p): return 1
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 try:
755
2dd5dbf28a2d change posix to os
Guido van Rossum <guido@python.org>
parents: 682
diff changeset
66 st = os.lstat(file)
2dd5dbf28a2d change posix to os
Guido van Rossum <guido@python.org>
parents: 682
diff changeset
67 except os.error:
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 return 1 # Doesn't exist -- skip it
682
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
69 # Skip non-plain files.
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
70 if not S_ISREG(st[ST_MODE]): return 1
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
71 # Skip huge files -- probably binaries.
7544ebac5698 Use fnmatch; read ".xxcign" for additional patterns to ignore.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
72 if st[ST_SIZE] >= MAXSIZE: return 1
503
e14d46440ea7 Better check to avoid executables.
Guido van Rossum <guido@python.org>
parents: 299
diff changeset
73 # Skip executables
e14d46440ea7 Better check to avoid executables.
Guido van Rossum <guido@python.org>
parents: 299
diff changeset
74 try:
e14d46440ea7 Better check to avoid executables.
Guido van Rossum <guido@python.org>
parents: 299
diff changeset
75 data = open(file, 'r').read(len(EXECMAGIC))
559
683edb0c4463 New == syntax
Guido van Rossum <guido@python.org>
parents: 503
diff changeset
76 if data == EXECMAGIC: return 1
503
e14d46440ea7 Better check to avoid executables.
Guido van Rossum <guido@python.org>
parents: 299
diff changeset
77 except:
e14d46440ea7 Better check to avoid executables.
Guido van Rossum <guido@python.org>
parents: 299
diff changeset
78 pass
e14d46440ea7 Better check to avoid executables.
Guido van Rossum <guido@python.org>
parents: 299
diff changeset
79 return 0
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
80
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
81 def badprefix(file):
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
82 for bad in badprefixes:
559
683edb0c4463 New == syntax
Guido van Rossum <guido@python.org>
parents: 503
diff changeset
83 if file[:len(bad)] == bad: return 1
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
84 return 0
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
85
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
86 def badsuffix(file):
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
87 for bad in badsuffixes:
559
683edb0c4463 New == syntax
Guido van Rossum <guido@python.org>
parents: 503
diff changeset
88 if file[-len(bad):] == bad: return 1
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
89 return 0
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
90
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
91 def go(args):
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
92 for file in args:
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
93 print file + ':'
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
94 if differing(file):
755
2dd5dbf28a2d change posix to os
Guido van Rossum <guido@python.org>
parents: 682
diff changeset
95 showdiffs(file)
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
96 if askyesno('Check in ' + file + ' ? '):
755
2dd5dbf28a2d change posix to os
Guido van Rossum <guido@python.org>
parents: 682
diff changeset
97 sts = os.system('rcs -l ' + file) # ignored
2dd5dbf28a2d change posix to os
Guido van Rossum <guido@python.org>
parents: 682
diff changeset
98 sts = os.system('ci -l ' + file)
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
99
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
100 def differing(file):
755
2dd5dbf28a2d change posix to os
Guido van Rossum <guido@python.org>
parents: 682
diff changeset
101 cmd = 'co -p ' + file + ' 2>/dev/null | cmp -s - ' + file
2dd5dbf28a2d change posix to os
Guido van Rossum <guido@python.org>
parents: 682
diff changeset
102 sts = os.system(cmd)
2dd5dbf28a2d change posix to os
Guido van Rossum <guido@python.org>
parents: 682
diff changeset
103 return sts != 0
2dd5dbf28a2d change posix to os
Guido van Rossum <guido@python.org>
parents: 682
diff changeset
104
2dd5dbf28a2d change posix to os
Guido van Rossum <guido@python.org>
parents: 682
diff changeset
105 def showdiffs(file):
2dd5dbf28a2d change posix to os
Guido van Rossum <guido@python.org>
parents: 682
diff changeset
106 cmd = 'rcsdiff ' + file + ' 2>&1 | ${PAGER-more}'
2dd5dbf28a2d change posix to os
Guido van Rossum <guido@python.org>
parents: 682
diff changeset
107 sts = os.system(cmd)
274
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
108
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
109 def askyesno(prompt):
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
110 s = raw_input(prompt)
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
111 return s in ['y', 'yes']
12a64115a4ee Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
112
1103
fcaafd5ec695 Friendlier response to interrupt. Use /usr/local/*bin*/python.
Guido van Rossum <guido@python.org>
parents: 1077
diff changeset
113 try:
fcaafd5ec695 Friendlier response to interrupt. Use /usr/local/*bin*/python.
Guido van Rossum <guido@python.org>
parents: 1077
diff changeset
114 setup()
fcaafd5ec695 Friendlier response to interrupt. Use /usr/local/*bin*/python.
Guido van Rossum <guido@python.org>
parents: 1077
diff changeset
115 go(getargs())
fcaafd5ec695 Friendlier response to interrupt. Use /usr/local/*bin*/python.
Guido van Rossum <guido@python.org>
parents: 1077
diff changeset
116 except KeyboardInterrupt:
fcaafd5ec695 Friendlier response to interrupt. Use /usr/local/*bin*/python.
Guido van Rossum <guido@python.org>
parents: 1077
diff changeset
117 print '[Intr]'