Commit | Line | Data |
---|---|---|
10c70dc6 ERE |
1 | import argparse |
2 | import binascii | |
3 | import json | |
4 | import logging | |
5 | import os | |
6 | import re | |
7 | import random | |
8 | import shutil | |
9 | from datetime import datetime | |
10 | from functools import partial | |
11 | ||
12 | from deltatar.deltatar import DeltaTar, NO_MATCH, MATCH, PARENT_MATCH | |
13 | from deltatar.tarfile import TarFile, GNU_FORMAT | |
14 | ||
15 | MODE = '' | |
16 | PASSWORD = '' | |
17 | ||
18 | consoleLogger = logging.StreamHandler() | |
19 | consoleLogger.setLevel(logging.DEBUG) | |
20 | ||
21 | def check_equal_dirs(path1, path2, deltatar): | |
22 | ''' | |
23 | compare the two directories source_dir and target_dir and check | |
24 | # they are the same | |
25 | ''' | |
26 | nbars1 = len(path1.split('/')) | |
27 | nbars2 = len(path2.split('/')) | |
28 | ||
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) | |
33 | while True: | |
34 | try: | |
35 | sitem = source_it.next() | |
36 | titem = target_it.next() | |
37 | except StopIteration: | |
38 | try: | |
39 | titem = target_it.next() | |
40 | raise Exception("iterators do not stop at the same time") | |
41 | except StopIteration: | |
42 | break | |
43 | try: | |
44 | assert deltatar._equal_stat_dicts(sitem, titem) | |
45 | except Exception, e: | |
46 | print sitem | |
47 | print titem | |
48 | print "FAIL" | |
49 | raise | |
50 | ||
51 | if __name__ == "__main__": | |
52 | parser = argparse.ArgumentParser() | |
53 | ||
54 | parser.add_argument("-m", "--mode", default='', | |
55 | help="Mode in which to read/write the backup") | |
56 | parser.add_argument("-t", "--targetpath", help="target path directory") | |
57 | parser.add_argument("-s", "--sourcepath", help="source path directory") | |
58 | parser.add_argument("-p", "--password", default='', help="password") | |
59 | parser.add_argument("-v", "--volsize", default=None, help="maximum volume size, in Megabytes") | |
60 | parser.add_argument("-r", "--restore", action='store_true', help="Restore a backup") | |
61 | parser.add_argument("-f", "--full", action='store_true', help="Create a full backup") | |
62 | parser.add_argument("-d", "--diff", action='store_true', help="Create a diff backup") | |
63 | parser.add_argument("-i", "--indexes", nargs='+', help="indexes paths") | |
64 | parser.add_argument("-e", "--equals", action='store_true', help="Checks two dirs are equal") | |
65 | ||
66 | args = parser.parse_args() | |
67 | deltatar = DeltaTar(mode=args.mode, password=args.password, logger=consoleLogger) | |
68 | ||
69 | if args.full: | |
70 | deltatar.create_full_backup(args.sourcepath, args.targetpath, args.volsize) | |
71 | elif args.diff: | |
72 | deltatar.create_diff_backup(args.sourcepath, args.targetpath, args.indexes[0], args.volsize) | |
73 | elif args.restore: | |
74 | if args.indexes is not None: | |
75 | deltatar.restore_backup(args.targetpath, backup_indexes_paths=args.indexes) | |
76 | else: | |
77 | deltatar.restore_backup(args.targetpath, backup_tar_path=args.sourcepath) | |
78 | elif args.equals: | |
79 | check_equal_dirs(os.path.abspath(args.sourcepath), os.path.abspath(args.targetpath), deltatar) |