9 from datetime import datetime
10 from functools import partial
12 from deltatar.deltatar import DeltaTar, NO_MATCH, MATCH, PARENT_MATCH
13 from deltatar.tarfile import TarFile, GNU_FORMAT
18 consoleLogger = logging.StreamHandler()
19 consoleLogger.setLevel(logging.DEBUG)
21 def check_equal_dirs(path1, path2, deltatar):
23 compare the two directories source_dir and target_dir and check
26 nbars1 = len(path1.split('/'))
27 nbars2 = len(path2.split('/'))
29 source_it = deltatar._recursive_walk_dir(path1)
30 source_it = deltatar.jsonize_path_iterator(source_it, strip=nbars1)
31 target_it = deltatar._recursive_walk_dir(path2)
32 target_it = deltatar.jsonize_path_iterator(target_it, strip=nbars2)
35 sitem = source_it.next()
36 titem = target_it.next()
39 titem = target_it.next()
40 raise Exception("iterators do not stop at the same time")
44 assert deltatar._equal_stat_dicts(sitem, titem)
51 if __name__ == "__main__":
54 #top = tracemalloc.DisplayTop(25)
55 #top.show_lineno = True
57 parser = argparse.ArgumentParser()
59 parser.add_argument("-m", "--mode", default='',
60 help="Mode in which to read/write the backup")
61 parser.add_argument("-t", "--targetpath", help="target path directory")
62 parser.add_argument("-s", "--sourcepath", help="source path directory")
63 parser.add_argument("-p", "--password", default='', help="password")
64 parser.add_argument("-v", "--volsize", default=None, help="maximum volume size, in Megabytes")
65 parser.add_argument("-r", "--restore", action='store_true', help="Restore a backup")
66 parser.add_argument("-f", "--full", action='store_true', help="Create a full backup")
67 parser.add_argument("-d", "--diff", action='store_true', help="Create a diff backup")
68 parser.add_argument("-i", "--indexes", nargs='+', help="indexes paths")
69 parser.add_argument("-l", "--list-files", action='store_true', help="List files in a tarball")
70 parser.add_argument("-x", "--excluded", nargs='+', default=[],
71 help="excluded files")
72 parser.add_argument("-inc", "--included", nargs='+', default=[],
73 help="included files")
74 parser.add_argument("-ip", "--included-path", default=None,
75 help="path to the file containing included paths")
76 parser.add_argument("-xp", "--excluded-path", default=None,
77 help="path to the file containing excluded paths")
78 parser.add_argument("-e", "--equals", action='store_true', help="Checks two dirs are equal")
80 args = parser.parse_args()
82 if args.excluded_path:
83 f = open(args.excluded_path, 'r')
84 excluded_files = f.readlines()
87 excluded_files = args.excluded
89 if args.included_path:
90 f = open(args.included_path, 'r')
91 included_files = f.readlines()
94 included_files = args.included
96 deltatar = DeltaTar(mode=args.mode, password=args.password,
97 logger=consoleLogger, excluded_files=excluded_files,
98 included_files=included_files)
101 deltatar.create_full_backup(args.sourcepath, args.targetpath, args.volsize)
103 deltatar.create_diff_backup(args.sourcepath, args.targetpath, args.indexes[0], args.volsize)
104 elif args.list_files:
105 deltatar.list_backup(args.sourcepath)
107 if args.indexes is not None:
108 deltatar.restore_backup(args.targetpath, backup_indexes_paths=args.indexes)
110 deltatar.restore_backup(args.targetpath, backup_tar_path=args.sourcepath)
112 check_equal_dirs(os.path.abspath(args.sourcepath), os.path.abspath(args.targetpath), deltatar)