''' directory_discrepancy ===================== This program compares two directory and shows which files exist in each directory that do not exist in the other. > directory_discrepancy dir1 dir2 flags: --recurse: Also check subdirectories. ''' import argparse import sys from voussoirkit import betterhelp from voussoirkit import pathclass from voussoirkit import operatornotify from voussoirkit import spinal from voussoirkit import vlogging log = vlogging.getLogger(__name__, 'directory_discrepancy') def helper(root, recurse): root = pathclass.Path(root) walk = spinal.walk(root, recurse=recurse, yield_directories=True, yield_files=True) for path in walk: relative = path.relative_to(root) yield relative def directory_discrepancy_argparse(args): files1 = set(helper(args.dir1, recurse=args.recurse)) files2 = set(helper(args.dir2, recurse=args.recurse)) print(f'In "{args.dir1}" but not in "{args.dir2}":') print('=============================') for discrepancy in sorted(files1.difference(files2)): print(discrepancy) print() print(f'In "{args.dir2}" but not in "{args.dir1}":') print('=============================') for discrepancy in sorted(files2.difference(files1)): print(discrepancy) return 0 @vlogging.main_decorator def main(argv): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument('dir1') parser.add_argument('dir2') parser.add_argument('--recurse', action='store_true') parser.set_defaults(func=directory_discrepancy_argparse) return betterhelp.single_main(argv, parser, __doc__) if __name__ == '__main__': raise SystemExit(main(sys.argv[1:]))