equal
deleted
inserted
replaced
|
1 #! /usr/bin/env python |
|
2 |
|
3 """Print a list of files that are mentioned in CVS directories. |
|
4 |
|
5 Usage: cvsfiles.py [-n file] [directory] ... |
|
6 |
|
7 If the '-n file' option is given, only files under CVS that are newer |
|
8 than the given file are printed; by default, all files under CVS are |
|
9 printed. As a special case, if a file does not exist, it is always |
|
10 printed. |
|
11 """ |
|
12 |
|
13 import os |
|
14 import sys |
|
15 import stat |
|
16 import getopt |
|
17 |
|
18 cutofftime = 0 |
|
19 |
|
20 def main(): |
|
21 try: |
|
22 opts, args = getopt.getopt(sys.argv[1:], "n:") |
|
23 except getopt.error, msg: |
|
24 print msg |
|
25 print __doc__, |
|
26 return 1 |
|
27 global cutofftime |
|
28 newerfile = None |
|
29 for o, a in opts: |
|
30 if o == '-n': |
|
31 cutofftime = getmtime(a) |
|
32 if args: |
|
33 for arg in args: |
|
34 process(arg) |
|
35 else: |
|
36 process(".") |
|
37 |
|
38 def process(dir): |
|
39 cvsdir = 0 |
|
40 subdirs = [] |
|
41 names = os.listdir(dir) |
|
42 for name in names: |
|
43 fullname = os.path.join(dir, name) |
|
44 if name == "CVS": |
|
45 cvsdir = fullname |
|
46 else: |
|
47 if os.path.isdir(fullname): |
|
48 if not os.path.islink(fullname): |
|
49 subdirs.append(fullname) |
|
50 if cvsdir: |
|
51 entries = os.path.join(cvsdir, "Entries") |
|
52 for e in open(entries).readlines(): |
|
53 words = e.split('/') |
|
54 if words[0] == '' and words[1:]: |
|
55 name = words[1] |
|
56 fullname = os.path.join(dir, name) |
|
57 if cutofftime and getmtime(fullname) <= cutofftime: |
|
58 pass |
|
59 else: |
|
60 print fullname |
|
61 for sub in subdirs: |
|
62 process(sub) |
|
63 |
|
64 def getmtime(filename): |
|
65 try: |
|
66 st = os.stat(filename) |
|
67 except os.error: |
|
68 return 0 |
|
69 return st[stat.ST_MTIME] |
|
70 |
|
71 if __name__ == '__main__': |
|
72 main() |