| #! /usr/bin/env python | 
 |  | 
 | """Print a list of files that are mentioned in CVS directories. | 
 |  | 
 | Usage: cvsfiles.py [-n file] [directory] ... | 
 |  | 
 | If the '-n file' option is given, only files under CVS that are newer | 
 | than the given file are printed; by default, all files under CVS are | 
 | printed.  As a special case, if a file does not exist, it is always | 
 | printed. | 
 | """ | 
 |  | 
 | import os | 
 | import sys | 
 | import stat | 
 | import getopt | 
 | import string | 
 |  | 
 | cutofftime = 0 | 
 |  | 
 | def main(): | 
 |     try: | 
 |         opts, args = getopt.getopt(sys.argv[1:], "n:") | 
 |     except getopt.error, msg: | 
 |         print msg | 
 |         print __doc__, | 
 |         return 1 | 
 |     global cutofftime | 
 |     newerfile = None | 
 |     for o, a in opts: | 
 |         if o == '-n': | 
 |             cutofftime = getmtime(a) | 
 |     if args: | 
 |         for arg in args: | 
 |             process(arg) | 
 |     else: | 
 |         process(".") | 
 |  | 
 | def process(dir): | 
 |     cvsdir = 0 | 
 |     subdirs = [] | 
 |     names = os.listdir(dir) | 
 |     for name in names: | 
 |         fullname = os.path.join(dir, name) | 
 |         if name == "CVS": | 
 |             cvsdir = fullname | 
 |         else: | 
 |             if os.path.isdir(fullname): | 
 |                 if not os.path.islink(fullname): | 
 |                     subdirs.append(fullname) | 
 |     if cvsdir: | 
 |         entries = os.path.join(cvsdir, "Entries") | 
 |         for e in open(entries).readlines(): | 
 |             words = string.split(e, '/') | 
 |             if words[0] == '' and words[1:]: | 
 |                 name = words[1] | 
 |                 fullname = os.path.join(dir, name) | 
 |                 if cutofftime and getmtime(fullname) <= cutofftime: | 
 |                     pass | 
 |                 else: | 
 |                     print fullname | 
 |     for sub in subdirs: | 
 |         process(sub) | 
 |  | 
 | def getmtime(filename): | 
 |     try: | 
 |         st = os.stat(filename) | 
 |     except os.error: | 
 |         return 0 | 
 |     return st[stat.ST_MTIME] | 
 |  | 
 | sys.exit(main()) |