Home | History | Annotate | Download | only in scripts
      1 #! /usr/bin/env python
      2 
      3 """Print a list of files that are mentioned in CVS directories.
      4 
      5 Usage: cvsfiles.py [-n file] [directory] ...
      6 
      7 If the '-n file' option is given, only files under CVS that are newer
      8 than the given file are printed; by default, all files under CVS are
      9 printed.  As a special case, if a file does not exist, it is always
     10 printed.
     11 """
     12 
     13 import os
     14 import sys
     15 import stat
     16 import getopt
     17 
     18 cutofftime = 0
     19 
     20 def main():
     21     try:
     22         opts, args = getopt.getopt(sys.argv[1:], "n:")
     23     except getopt.error, msg:
     24         print msg
     25         print __doc__,
     26         return 1
     27     global cutofftime
     28     newerfile = None
     29     for o, a in opts:
     30         if o == '-n':
     31             cutofftime = getmtime(a)
     32     if args:
     33         for arg in args:
     34             process(arg)
     35     else:
     36         process(".")
     37 
     38 def process(dir):
     39     cvsdir = 0
     40     subdirs = []
     41     names = os.listdir(dir)
     42     for name in names:
     43         fullname = os.path.join(dir, name)
     44         if name == "CVS":
     45             cvsdir = fullname
     46         else:
     47             if os.path.isdir(fullname):
     48                 if not os.path.islink(fullname):
     49                     subdirs.append(fullname)
     50     if cvsdir:
     51         entries = os.path.join(cvsdir, "Entries")
     52         for e in open(entries).readlines():
     53             words = e.split('/')
     54             if words[0] == '' and words[1:]:
     55                 name = words[1]
     56                 fullname = os.path.join(dir, name)
     57                 if cutofftime and getmtime(fullname) <= cutofftime:
     58                     pass
     59                 else:
     60                     print fullname
     61     for sub in subdirs:
     62         process(sub)
     63 
     64 def getmtime(filename):
     65     try:
     66         st = os.stat(filename)
     67     except os.error:
     68         return 0
     69     return st[stat.ST_MTIME]
     70 
     71 if __name__ == '__main__':
     72     main()
     73