From: Daniel Garcia Moreno Date: Thu, 29 Aug 2013 12:00:20 +0000 (+0200) Subject: Fixed DeltaTar create_diff_backup and restore_backup X-Git-Tag: v2.2~108 X-Git-Url: http://developer.intra2net.com/git/?a=commitdiff_plain;h=8edb2e3c95692a2305a1ecc666852dc8e8892b00;p=python-delta-tar Fixed DeltaTar create_diff_backup and restore_backup --- diff --git a/deltatar/deltatar.py b/deltatar/deltatar.py index 7eaec08..1f610ba 100644 --- a/deltatar/deltatar.py +++ b/deltatar/deltatar.py @@ -712,8 +712,11 @@ class DeltaTar(object): dir_it = self._recursive_walk_dir('.') dir_path_it = self.jsonize_path_iterator(dir_it) + index_it = sorted(index_it, key=lambda x: x[0]['path']) + dir_path_it = sorted(dir_path_it, key=lambda x: x['path']) + # for each file to be in the backup, do: - for ipath, dpath, l_no in self.collate_iterators(index_it, dir_path_it): + for ipath, dpath, l_no in self.collate_iterators(iter(index_it), iter(dir_path_it)): action = None # if file is not in the index, it means it's a new file, so we have # to take a snapshot @@ -1030,8 +1033,12 @@ class DeltaTar(object): dir_it = self._recursive_walk_dir('.') dir_path_it = self.jsonize_path_iterator(dir_it) + index_it = sorted(index_it, key=lambda x: x[0]['path']) + dir_path_it = sorted(dir_path_it, key=lambda x: x['path']) + helper._data[0]['iterator'] = iter(index_it) + # for each file to be in the backup, do: - for ipath, dpath, l_no in self.collate_iterators(index_it, dir_path_it): + for ipath, dpath, l_no in self.collate_iterators(iter(index_it), iter(dir_path_it)): if not ipath: upath = dpath['path'] op_type = dpath['type'] @@ -1057,7 +1064,8 @@ class DeltaTar(object): # we have to restore the file, but first we need to delete the # current existing file helper.delete(upath) - helper.restore(ipath, l_no) + if ipath: + helper.restore(ipath, l_no) helper.restore_directories_permissions() os.chdir(cwd) @@ -1167,7 +1175,9 @@ class RestoreHelper(object): cur_index = 1 while cur_index < len(self._data): data = self._data[cur_index] - it = data['iterator'] + listit = list(data['iterator']) + it = iter(listit) + data['iterator'] = iter(listit) # find the path in the index d = None @@ -1272,11 +1282,12 @@ class RestoreHelper(object): # seek tarfile if needed offset = file_data.get('offset', -1) if index_data['tarobj']: - member = index_data['tarobj'].next() - if member.path != index_data['tarobj']: + # TODO review this code... + #member = index_data['tarobj'].next() + #if member.path != index_data['tarobj']: # force a seek and reopen - index_data['tarobj'].close() - index_data['tarobj'] = None + index_data['tarobj'].close() + index_data['tarobj'] = None # open the tarfile if needed if not index_data['tarobj']: diff --git a/testing/test_deltatar.py b/testing/test_deltatar.py index 5cf7606..b85f669 100644 --- a/testing/test_deltatar.py +++ b/testing/test_deltatar.py @@ -909,7 +909,8 @@ class DeltaTarTest(BaseTest): # check index items index_path = os.path.join("backup_dir2", prev_index_filename) index_it = deltatar.iterate_index_path(index_path) - assert [i[0]['path'] for i in index_it] == [ + l = sorted([i[0]['path'] for i in index_it]) + assert l == sorted([ 'list://./big', 'snapshot://./bigdir', 'delete://./small', @@ -920,7 +921,7 @@ class DeltaTarTest(BaseTest): 'list://./test/test2', 'snapshot://./bigdir/a', 'snapshot://./bigdir/b' - ] + ]) # check the tar file assert os.path.exists("backup_dir2")