From: Eduardo Robles Elvira Date: Tue, 17 Sep 2013 09:46:49 +0000 (+0200) Subject: add handy backup command, used for benchmarks X-Git-Tag: v2.2~103 X-Git-Url: http://developer.intra2net.com/git/?a=commitdiff_plain;h=10c70dc6b14e49a67603fc6b745fc077ca6bbe39;p=python-delta-tar add handy backup command, used for benchmarks --- diff --git a/backup.py b/backup.py new file mode 100644 index 0000000..2d19de9 --- /dev/null +++ b/backup.py @@ -0,0 +1,79 @@ +import argparse +import binascii +import json +import logging +import os +import re +import random +import shutil +from datetime import datetime +from functools import partial + +from deltatar.deltatar import DeltaTar, NO_MATCH, MATCH, PARENT_MATCH +from deltatar.tarfile import TarFile, GNU_FORMAT + +MODE = '' +PASSWORD = '' + +consoleLogger = logging.StreamHandler() +consoleLogger.setLevel(logging.DEBUG) + +def check_equal_dirs(path1, path2, deltatar): + ''' + compare the two directories source_dir and target_dir and check + # they are the same + ''' + nbars1 = len(path1.split('/')) + nbars2 = len(path2.split('/')) + + source_it = deltatar._recursive_walk_dir(path1) + source_it = deltatar.jsonize_path_iterator(source_it, strip=nbars1) + target_it = deltatar._recursive_walk_dir(path2) + target_it = deltatar.jsonize_path_iterator(target_it, strip=nbars2) + while True: + try: + sitem = source_it.next() + titem = target_it.next() + except StopIteration: + try: + titem = target_it.next() + raise Exception("iterators do not stop at the same time") + except StopIteration: + break + try: + assert deltatar._equal_stat_dicts(sitem, titem) + except Exception, e: + print sitem + print titem + print "FAIL" + raise + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + + parser.add_argument("-m", "--mode", default='', + help="Mode in which to read/write the backup") + parser.add_argument("-t", "--targetpath", help="target path directory") + parser.add_argument("-s", "--sourcepath", help="source path directory") + parser.add_argument("-p", "--password", default='', help="password") + parser.add_argument("-v", "--volsize", default=None, help="maximum volume size, in Megabytes") + parser.add_argument("-r", "--restore", action='store_true', help="Restore a backup") + parser.add_argument("-f", "--full", action='store_true', help="Create a full backup") + parser.add_argument("-d", "--diff", action='store_true', help="Create a diff backup") + parser.add_argument("-i", "--indexes", nargs='+', help="indexes paths") + parser.add_argument("-e", "--equals", action='store_true', help="Checks two dirs are equal") + + args = parser.parse_args() + deltatar = DeltaTar(mode=args.mode, password=args.password, logger=consoleLogger) + + if args.full: + deltatar.create_full_backup(args.sourcepath, args.targetpath, args.volsize) + elif args.diff: + deltatar.create_diff_backup(args.sourcepath, args.targetpath, args.indexes[0], args.volsize) + elif args.restore: + if args.indexes is not None: + deltatar.restore_backup(args.targetpath, backup_indexes_paths=args.indexes) + else: + deltatar.restore_backup(args.targetpath, backup_tar_path=args.sourcepath) + elif args.equals: + check_equal_dirs(os.path.abspath(args.sourcepath), os.path.abspath(args.targetpath), deltatar) \ No newline at end of file