''' Created on 22 nov. 2016 @author: olivier.massot ''' from ffile import flist import sys def compare_dirs(source_dir, reference_dir): print("** Compare {} to {} **".format(source_dir, reference_dir)) err_code = 0 list_source_dir = flist(source_dir, recursive=True, listdirs=False, listfiles=True, complete_paths=True) list_reference_dir = flist(reference_dir, recursive=True, listdirs=False, listfiles=True, complete_paths=True) if len(list_source_dir) != len(list_reference_dir): print(">> number of dirs / files does not match") print("Diff:") for name in list( set(list_source_dir) - set(list_reference_dir) ): print("+ "+name) err_code += 1 for name in list( set(list_reference_dir) - set(list_source_dir) ): print("- "+name) err_code += 1 for source_path in list_source_dir: linecount = 0 with open(source_path, "rb") as source_file: ref_path = source_path.replace(source_dir, reference_dir) with open(ref_path, "rb") as ref_file: for line in source_file: linecount += 1 if line != ref_file.readline(): print("> {} : source and ref differ at line {}".format(source_path, linecount)) err_code += 1 continue return err_code if __name__ == "__main__": _, source_dir, reference_dir = sys.argv exit_result = compare_dirs(source_dir, reference_dir) sys.exit(exit_result)