fixing some restore problems
[python-delta-tar] / backup.py
CommitLineData
10c70dc6
ERE
1import argparse
2import binascii
3import json
4import logging
5import os
6import re
7import random
8import shutil
9from datetime import datetime
10from functools import partial
11
12from deltatar.deltatar import DeltaTar, NO_MATCH, MATCH, PARENT_MATCH
13from deltatar.tarfile import TarFile, GNU_FORMAT
14
15MODE = ''
16PASSWORD = ''
17
18consoleLogger = logging.StreamHandler()
19consoleLogger.setLevel(logging.DEBUG)
20
21def 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
51if __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)