#!/usr/bin/python import os import sys try: from subprocess import check_call except ImportError: from subprocess import call def check_call(*popenargs, **kwargs): retcode = call(*popenargs, **kwargs) if retcode: cmd = kwargs.get("args") if cmd is None: cmd = popenargs[0] raise Exception("Command '%s' returned non-zero exit status %c" % (cmd, retcode)) (dir1, dir2) = sys.argv[1:] def local_walk(dir, prefix=''): for entry in os.listdir(dir): if entry in ('CVS', '.hg', '.hgignore', '.cvsignore'): continue if os.path.isdir("%s/%s" % (dir, entry)): for e in local_walk("%s/%s" % (dir, entry), "%s%s%s" % (prefix, prefix != '' and '/' or '', entry)): yield e else: yield "%s/%s" % (prefix, entry) files2 = {} for file in local_walk(dir2): files2[file] = True status = 0 for file in local_walk(dir1): if file not in files2: status = 1 print "File %s in dir1, not in dir2." % file continue try: check_call(['diff', '-U', '4', '%s/%s' % (dir1, file), '%s/%s' % (dir2, file)]) except KeyboardInterrupt: raise except: status = 1 print "File %s doesn't match!" % file del files2[file] for file in files2.keys(): status = 1 print "File %s in dir2, not in dir1." % file sys.exit(status)