73 lines
1.7 KiB
Python
73 lines
1.7 KiB
Python
|
#! /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()
|