import datetime
import binascii
import os
+import shutil
import re
import stat
import json
os.chdir(target_path)
def filter(cls, tarinfo):
- tarinfo.path = self.unprefixed(tarinfo.path)
- tarinfo.name = self.unprefixed(tarinfo.name)
- return cls.filter_path(tarinfo.path, '.', tarinfo.isdir()) != NO_MATCH
+ if tarinfo.path.startswith("snapshot://"):
+ tarinfo.path = self.unprefixed(tarinfo.path)
+ tarinfo.name = self.unprefixed(tarinfo.name)
+ return cls.filter_path(tarinfo.path, '.', tarinfo.isdir()) != NO_MATCH
+ elif tarinfo.path.startswith("delete://"):
+ path = self.unprefixed(tarinfo.path)
+ shutil.rmtree(path)
+ return False
+ else:
+ return False
filter = partial(filter, self)
tarobj.extractall(filter=filter)
# check index items
index_path = os.path.join("backup_dir2", prev_index_filename)
index_it = deltatar.iterate_index_path(index_path)
+ n = 0
for i in index_it:
+ n += 1
assert i[0]['path'].startswith("list://")
- tar_filename = deltatar.volume_name_func('backup_dir', True, 0)
- tar_path = os.path.join("backup_dir", tar_filename)
+ assert n == 7
# check the tar file
+ assert os.path.exists("backup_dir2")
+ shutil.rmtree("source_dir")
+
+ tar_filename = deltatar.volume_name_func('backup_dir2', True, 0)
+ tar_path = os.path.join("backup_dir2", tar_filename)
+
+ # no file restored, because the diff was empty
+ deltatar.restore_backup(target_path="source_dir",
+ backup_tar_path=tar_path)
+ assert len(os.listdir("source_dir")) == 0
+
class DeltaTar2Test(DeltaTarTest):
'''