2 # usage: takes list of directories on command line
7 from itertools import ifilter, ifilterfalse, imap, izip
9 from pprint import pprint
13 def __init__(self, dir, name, md5sum):
18 return '<%r, %r, %r>' % (self.dir, self.name, self.md5sum)
21 def md5sum_file(filename):
22 f = open(filename, 'r')
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]
32 # Return a copy with items that occur in skip removed.
34 def _filter(flist, skip):
35 return list(ifilterfalse(skip.__contains__, flist))
43 names = Set([x.name for x in r])
46 # check for missing files across the union of names
48 names_in_dir = Set([x.name for x in r if x.dir == d])
49 diff = names.difference(names_in_dir)
51 print "%s is missing %r" % (d, diff)
53 # check for different versions of files
54 name_list = [n for n in names]
57 for name in name_list:
59 pairs = [(x.dir, x.md5sum) for x in r if x.name == name]
60 for (dir, sum) in pairs:
65 if len(vers) != 1: # multiple versions
66 print "Multiple versions of %s:" % (name,)
71 if __name__ == '__main__':