Removing PowerLine since we weren't using it and don't have plans to.
[debian/gnuradio] / dtools / bin / check-config-files
1 #!/usr/bin/env python
2 # usage: takes list of directories on command line
3
4 import sys
5 import os
6 import os.path
7 from itertools import ifilter, ifilterfalse, imap, izip
8 import md5
9 from pprint import pprint
10 from sets import Set
11
12 class info(object):
13     def __init__(self, dir, name, md5sum):
14         self.dir = dir
15         self.name = name
16         self.md5sum = md5sum
17     def __repr__(self):
18         return '<%r, %r, %r>' % (self.dir, self.name, self.md5sum)
19
20
21 def md5sum_file(filename):
22     f = open(filename, 'r')
23     m = md5.new(f.read())
24     return m.hexdigest()
25
26 def process_dir(dir):
27     files = list(ifilterfalse(lambda s: s.endswith('~'),
28                               _filter(os.listdir(dir), ('CVS','Makefile', 'Makefile.in', '.svn'))))
29     return [info(dir, f, md5sum_file(os.path.join(dir, f))) for f in files]
30
31
32 # Return a copy with items that occur in skip removed.
33 #
34 def _filter(flist, skip):
35     return list(ifilterfalse(skip.__contains__, flist))
36
37 def main():
38     dirs = sys.argv[1:]
39     r = []
40     for d in dirs:
41         r += process_dir(d)
42
43     names = Set([x.name for x in r])
44     #pprint(names)
45
46     # check for missing files across the union of names
47     for d in dirs:
48         names_in_dir = Set([x.name for x in r if x.dir == d])
49         diff = names.difference(names_in_dir)
50         if len(diff) != 0:
51             print "%s is missing %r" % (d, diff)
52
53     # check for different versions of files
54     name_list = [n for n in names]
55     name_list.sort()
56
57     for name in name_list:
58         vers = {}
59         pairs = [(x.dir, x.md5sum) for x in r if x.name == name]
60         for (dir, sum) in pairs:
61             if vers.has_key(sum):
62                 vers[sum].append(dir)
63             else:
64                 vers[sum] = [ dir ]
65         if len(vers) != 1:     # multiple versions
66             print "Multiple versions of %s:" % (name,)
67             pprint(vers)
68     
69     # pprint(r)
70
71 if __name__ == '__main__':
72     main()