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__": | |
1046c582 ERE |
52 | #import tracemalloc |
53 | #tracemalloc.enable() | |
54 | #top = tracemalloc.DisplayTop(25) | |
55 | #top.show_lineno = True | |
56 | #top.start(60) | |
10c70dc6 ERE |
57 | parser = argparse.ArgumentParser() |
58 | ||
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") | |
8c65a2b1 ERE |
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("-xp", "--excluded-path", default=None, | |
73 | help="path to the file containing excluded paths") | |
10c70dc6 ERE |
74 | parser.add_argument("-e", "--equals", action='store_true', help="Checks two dirs are equal") |
75 | ||
76 | args = parser.parse_args() | |
8c65a2b1 ERE |
77 | |
78 | if args.excluded_path: | |
79 | f = open(args.excluded_path, 'r') | |
80 | excluded_files = f.readlines() | |
81 | f.close() | |
82 | else: | |
83 | excluded_files = args.excluded | |
84 | ||
85 | deltatar = DeltaTar(mode=args.mode, password=args.password, | |
86 | logger=consoleLogger, excluded_files=excluded_files) | |
10c70dc6 ERE |
87 | |
88 | if args.full: | |
89 | deltatar.create_full_backup(args.sourcepath, args.targetpath, args.volsize) | |
90 | elif args.diff: | |
91 | deltatar.create_diff_backup(args.sourcepath, args.targetpath, args.indexes[0], args.volsize) | |
8c65a2b1 ERE |
92 | elif args.list_files: |
93 | deltatar.list_backup(args.sourcepath) | |
10c70dc6 ERE |
94 | elif args.restore: |
95 | if args.indexes is not None: | |
96 | deltatar.restore_backup(args.targetpath, backup_indexes_paths=args.indexes) | |
97 | else: | |
98 | deltatar.restore_backup(args.targetpath, backup_tar_path=args.sourcepath) | |
99 | elif args.equals: | |
100 | check_equal_dirs(os.path.abspath(args.sourcepath), os.path.abspath(args.targetpath), deltatar) |