#! /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 | |
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 = e.split('/') | |
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] | |
if __name__ == '__main__': | |
main() |