| #! /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()) |