summaryrefslogtreecommitdiff
path: root/rdiff-backup/testing/commontest.py
diff options
context:
space:
mode:
Diffstat (limited to 'rdiff-backup/testing/commontest.py')
-rw-r--r--rdiff-backup/testing/commontest.py44
1 files changed, 40 insertions, 4 deletions
diff --git a/rdiff-backup/testing/commontest.py b/rdiff-backup/testing/commontest.py
index de897bb..6221866 100644
--- a/rdiff-backup/testing/commontest.py
+++ b/rdiff-backup/testing/commontest.py
@@ -163,7 +163,7 @@ def _get_main():
return Globals.Main
def CompareRecursive(src_rp, dest_rp, compare_hardlinks = 1,
- equality_func = None):
+ equality_func = None, exclude_rbdir = 1):
"""Compare src_rp and dest_rp, which can be directories
This only compares file attributes, not the actual data. This
@@ -179,8 +179,22 @@ def CompareRecursive(src_rp, dest_rp, compare_hardlinks = 1,
compare_hardlinks), 3)
src_select = Select(DSRPath(1, src_rp))
dest_select = Select(DSRPath(None, dest_rp))
- src_select.parse_rbdir_exclude()
- dest_select.parse_rbdir_exclude()
+ if exclude_rbdir:
+ src_select.parse_rbdir_exclude()
+ dest_select.parse_rbdir_exclude()
+ else:
+ # include rdiff-backup-data/increments
+ src_select.add_selection_func(src_select.glob_get_tuple_sf(
+ ('rdiff-backup-data', 'increments'), 1))
+ dest_select.add_selection_func(src_select.glob_get_tuple_sf(
+ ('rdiff-backup-data', 'increments'), 1))
+
+ # but exclude rdiff-backup-data
+ src_select.add_selection_func(src_select.glob_get_tuple_sf(
+ ('rdiff-backup-data',), 0))
+ dest_select.add_selection_func(src_select.glob_get_tuple_sf(
+ ('rdiff-backup-data',), 0))
+
src_select.set_iter()
dest_select.set_iter()
dsiter1, dsiter2 = src_select.iterate_with_finalizer(), \
@@ -194,10 +208,32 @@ def CompareRecursive(src_rp, dest_rp, compare_hardlinks = 1,
Hardlink.get_indicies(dest_rorp, None)), 3)
return None
+ def rbdir_equal(src_rorp, dest_rorp):
+ """Like hardlink_equal, but make allowances for data directories"""
+ if not src_rorp.index and not dest_rorp.index: return 1
+ if (src_rorp.index and src_rorp.index[0] == 'rdiff-backup-data' and
+ src_rorp.index == dest_rorp.index):
+ # Don't compare dirs - they don't carry significant info
+ if dest_rorp.isdir() and src_rorp.isdir(): return 1
+ if dest_rorp.isreg() and src_rorp.isreg():
+ # Don't compare gzipped files because it is apparently
+ # non-deterministic.
+ if dest_rorp.index[-1].endswith('gz'): return 1
+ # Don't compare .missing increments because they don't matter
+ if dest_rorp.index[-1].endswith('.missing'): return 1
+ if src_rorp != dest_rorp: return None
+ if Hardlink.rorp_eq(src_rorp, dest_rorp): return 1
+ Log("%s: %s" % (src_rorp.index, Hardlink.get_indicies(src_rorp, 1)), 3)
+ Log("%s: %s" % (dest_rorp.index,
+ Hardlink.get_indicies(dest_rorp, None)), 3)
+ return None
+
if compare_hardlinks:
dsiter1 = Hardlink.add_rorp_iter(dsiter1, 1)
dsiter2 = Hardlink.add_rorp_iter(dsiter2, None)
- result = Iter.equal(dsiter1, dsiter2, 1, hardlink_equal)
+ if exclude_rbdir:
+ result = Iter.equal(dsiter1, dsiter2, 1, hardlink_equal)
+ else: result = Iter.equal(dsiter1, dsiter2, 1, rbdir_equal)
elif equality_func: result = Iter.equal(dsiter1, dsiter2, 1, equality_func)
else: result = Iter.equal(dsiter1, dsiter2, 1)