blob: d133a40fd81fe6c038e0c20a7fc29fb48a12cd67 [file] [log] [blame]
Guido van Rossum30e53c01997-08-14 20:14:54 +00001#! /usr/bin/env python
2
Guido van Rossumca83f011997-11-24 23:49:35 +00003"""Print a list of files that are mentioned in CVS directories.
4
5Usage: cvsfiles.py [-n file] [directory] ...
6
7If the '-n file' option is given, only files under CVS that are newer
8than the given file are printed; by default, all files under CVS are
9printed. As a special case, if a file does not exist, it is always
10printed.
11"""
Guido van Rossum30e53c01997-08-14 20:14:54 +000012
13import os
14import sys
Guido van Rossumca83f011997-11-24 23:49:35 +000015import stat
16import getopt
Guido van Rossum30e53c01997-08-14 20:14:54 +000017import string
18
Guido van Rossumca83f011997-11-24 23:49:35 +000019cutofftime = 0
20
Guido van Rossum30e53c01997-08-14 20:14:54 +000021def main():
Guido van Rossumca83f011997-11-24 23:49:35 +000022 try:
Guido van Rossumed5b3d81998-03-24 05:30:29 +000023 opts, args = getopt.getopt(sys.argv[1:], "n:")
Guido van Rossumca83f011997-11-24 23:49:35 +000024 except getopt.error, msg:
Guido van Rossumed5b3d81998-03-24 05:30:29 +000025 print msg
26 print __doc__,
27 return 1
Guido van Rossumca83f011997-11-24 23:49:35 +000028 global cutofftime
29 newerfile = None
30 for o, a in opts:
Guido van Rossumed5b3d81998-03-24 05:30:29 +000031 if o == '-n':
32 cutofftime = getmtime(a)
Guido van Rossum30e53c01997-08-14 20:14:54 +000033 if args:
Guido van Rossumed5b3d81998-03-24 05:30:29 +000034 for arg in args:
35 process(arg)
Guido van Rossum30e53c01997-08-14 20:14:54 +000036 else:
Guido van Rossumed5b3d81998-03-24 05:30:29 +000037 process(".")
Guido van Rossum30e53c01997-08-14 20:14:54 +000038
39def process(dir):
40 cvsdir = 0
41 subdirs = []
Guido van Rossum30e53c01997-08-14 20:14:54 +000042 names = os.listdir(dir)
43 for name in names:
Guido van Rossumed5b3d81998-03-24 05:30:29 +000044 fullname = os.path.join(dir, name)
45 if name == "CVS":
46 cvsdir = fullname
47 else:
48 if os.path.isdir(fullname):
49 if not os.path.islink(fullname):
50 subdirs.append(fullname)
Guido van Rossum30e53c01997-08-14 20:14:54 +000051 if cvsdir:
Guido van Rossumed5b3d81998-03-24 05:30:29 +000052 entries = os.path.join(cvsdir, "Entries")
53 for e in open(entries).readlines():
54 words = string.split(e, '/')
55 if words[0] == '' and words[1:]:
56 name = words[1]
57 fullname = os.path.join(dir, name)
58 if cutofftime and getmtime(fullname) <= cutofftime:
59 pass
60 else:
61 print fullname
Guido van Rossum30e53c01997-08-14 20:14:54 +000062 for sub in subdirs:
Guido van Rossumed5b3d81998-03-24 05:30:29 +000063 process(sub)
Guido van Rossum30e53c01997-08-14 20:14:54 +000064
Guido van Rossumca83f011997-11-24 23:49:35 +000065def getmtime(filename):
66 try:
Guido van Rossumed5b3d81998-03-24 05:30:29 +000067 st = os.stat(filename)
Guido van Rossumca83f011997-11-24 23:49:35 +000068 except os.error:
Guido van Rossumed5b3d81998-03-24 05:30:29 +000069 return 0
Guido van Rossumca83f011997-11-24 23:49:35 +000070 return st[stat.ST_MTIME]
71
72sys.exit(main())