blob: 53b42943ce85c9128f88c26cef860a959d6f20e3 [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 +000017
Guido van Rossumca83f011997-11-24 23:49:35 +000018cutofftime = 0
19
Guido van Rossum30e53c01997-08-14 20:14:54 +000020def main():
Guido van Rossumca83f011997-11-24 23:49:35 +000021 try:
Guido van Rossumed5b3d81998-03-24 05:30:29 +000022 opts, args = getopt.getopt(sys.argv[1:], "n:")
Guido van Rossumca83f011997-11-24 23:49:35 +000023 except getopt.error, msg:
Guido van Rossumed5b3d81998-03-24 05:30:29 +000024 print msg
25 print __doc__,
26 return 1
Guido van Rossumca83f011997-11-24 23:49:35 +000027 global cutofftime
28 newerfile = None
29 for o, a in opts:
Guido van Rossumed5b3d81998-03-24 05:30:29 +000030 if o == '-n':
31 cutofftime = getmtime(a)
Guido van Rossum30e53c01997-08-14 20:14:54 +000032 if args:
Guido van Rossumed5b3d81998-03-24 05:30:29 +000033 for arg in args:
34 process(arg)
Guido van Rossum30e53c01997-08-14 20:14:54 +000035 else:
Guido van Rossumed5b3d81998-03-24 05:30:29 +000036 process(".")
Guido van Rossum30e53c01997-08-14 20:14:54 +000037
38def process(dir):
39 cvsdir = 0
40 subdirs = []
Guido van Rossum30e53c01997-08-14 20:14:54 +000041 names = os.listdir(dir)
42 for name in names:
Guido van Rossumed5b3d81998-03-24 05:30:29 +000043 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)
Guido van Rossum30e53c01997-08-14 20:14:54 +000050 if cvsdir:
Guido van Rossumed5b3d81998-03-24 05:30:29 +000051 entries = os.path.join(cvsdir, "Entries")
52 for e in open(entries).readlines():
Walter Dörwaldaaab30e2002-09-11 20:36:02 +000053 words = e.split('/')
Guido van Rossumed5b3d81998-03-24 05:30:29 +000054 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
Guido van Rossum30e53c01997-08-14 20:14:54 +000061 for sub in subdirs:
Guido van Rossumed5b3d81998-03-24 05:30:29 +000062 process(sub)
Guido van Rossum30e53c01997-08-14 20:14:54 +000063
Guido van Rossumca83f011997-11-24 23:49:35 +000064def getmtime(filename):
65 try:
Guido van Rossumed5b3d81998-03-24 05:30:29 +000066 st = os.stat(filename)
Guido van Rossumca83f011997-11-24 23:49:35 +000067 except os.error:
Guido van Rossumed5b3d81998-03-24 05:30:29 +000068 return 0
Guido van Rossumca83f011997-11-24 23:49:35 +000069 return st[stat.ST_MTIME]
70
Andrew M. Kuchlinge236b382004-08-09 17:27:55 +000071if __name__ == '__main__':
72 main()