start working on AES-only delta tar mode, with no encryption. some tests still fail
[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__":
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)