summaryrefslogtreecommitdiffstats
path: root/Tools/scripts/cvsfiles.py
blob: 5b691f61bb538d0d98a4cfa0793e46ecd859efca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#! /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())