add handy backup command, used for benchmarks
authorEduardo Robles Elvira <edulix@wadobo.com>
Tue, 17 Sep 2013 09:46:49 +0000 (11:46 +0200)
committerEduardo Robles Elvira <edulix@wadobo.com>
Tue, 17 Sep 2013 09:47:02 +0000 (11:47 +0200)
backup.py [new file with mode: 0644]

diff --git a/backup.py b/backup.py
new file mode 100644 (file)
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