mirror of
https://github.com/borgbackup/borg.git
synced 2024-12-25 01:06:50 +00:00
Merge pull request #2900 from imsodin/fix-2899
Only compare contents when chunker params match (fixes #2899)
This commit is contained in:
commit
eee4542f3b
2 changed files with 21 additions and 18 deletions
|
@ -1021,18 +1021,19 @@ def contents_changed(item1, item2):
|
|||
def compare_content(path, item1, item2):
|
||||
if contents_changed(item1, item2):
|
||||
if item1.get('deleted'):
|
||||
return ('added {:>13}'.format(format_file_size(sum_chunk_size(item2))))
|
||||
elif item2.get('deleted'):
|
||||
return ('removed {:>11}'.format(format_file_size(sum_chunk_size(item1))))
|
||||
else:
|
||||
chunk_ids1 = {c.id for c in item1.chunks}
|
||||
chunk_ids2 = {c.id for c in item2.chunks}
|
||||
added_ids = chunk_ids2 - chunk_ids1
|
||||
removed_ids = chunk_ids1 - chunk_ids2
|
||||
added = sum_chunk_size(item2, added_ids)
|
||||
removed = sum_chunk_size(item1, removed_ids)
|
||||
return ('{:>9} {:>9}'.format(format_file_size(added, precision=1, sign=True),
|
||||
format_file_size(-removed, precision=1, sign=True)))
|
||||
return 'added {:>13}'.format(format_file_size(sum_chunk_size(item2)))
|
||||
if item2.get('deleted'):
|
||||
return 'removed {:>11}'.format(format_file_size(sum_chunk_size(item1)))
|
||||
if not can_compare_chunk_ids:
|
||||
return 'modified'
|
||||
chunk_ids1 = {c.id for c in item1.chunks}
|
||||
chunk_ids2 = {c.id for c in item2.chunks}
|
||||
added_ids = chunk_ids2 - chunk_ids1
|
||||
removed_ids = chunk_ids1 - chunk_ids2
|
||||
added = sum_chunk_size(item2, added_ids)
|
||||
removed = sum_chunk_size(item1, removed_ids)
|
||||
return '{:>9} {:>9}'.format(format_file_size(added, precision=1, sign=True),
|
||||
format_file_size(-removed, precision=1, sign=True))
|
||||
|
||||
def compare_directory(item1, item2):
|
||||
if item2.get('deleted') and not item1.get('deleted'):
|
||||
|
|
|
@ -3276,9 +3276,10 @@ def test_basic_functionality(self):
|
|||
self.cmd('create', self.repository_location + '::test1a', 'input')
|
||||
self.cmd('create', '--chunker-params', '16,18,17,4095', self.repository_location + '::test1b', 'input')
|
||||
|
||||
def do_asserts(output, archive):
|
||||
def do_asserts(output, can_compare_ids):
|
||||
# File contents changed (deleted and replaced with a new file)
|
||||
assert 'B input/file_replaced' in output
|
||||
change = 'B' if can_compare_ids else '{:<19}'.format('modified')
|
||||
assert '{} input/file_replaced'.format(change) in output
|
||||
|
||||
# File unchanged
|
||||
assert 'input/file_unchanged' not in output
|
||||
|
@ -3307,9 +3308,10 @@ def do_asserts(output, archive):
|
|||
# The inode has two links and the file contents changed. Borg
|
||||
# should notice the changes in both links. However, the symlink
|
||||
# pointing to the file is not changed.
|
||||
assert '0 B input/empty' in output
|
||||
change = '0 B' if can_compare_ids else '{:<19}'.format('modified')
|
||||
assert '{} input/empty'.format(change) in output
|
||||
if are_hardlinks_supported():
|
||||
assert '0 B input/hardlink_contents_changed' in output
|
||||
assert '{} input/hardlink_contents_changed'.format(change) in output
|
||||
if are_symlinks_supported():
|
||||
assert 'input/link_target_contents_changed' not in output
|
||||
|
||||
|
@ -3336,9 +3338,9 @@ def do_asserts(output, archive):
|
|||
if are_hardlinks_supported():
|
||||
assert 'input/hardlink_target_replaced' not in output
|
||||
|
||||
do_asserts(self.cmd('diff', self.repository_location + '::test0', 'test1a'), '1a')
|
||||
do_asserts(self.cmd('diff', self.repository_location + '::test0', 'test1a'), True)
|
||||
# We expect exit_code=1 due to the chunker params warning
|
||||
do_asserts(self.cmd('diff', self.repository_location + '::test0', 'test1b', exit_code=1), '1b')
|
||||
do_asserts(self.cmd('diff', self.repository_location + '::test0', 'test1b', exit_code=1), False)
|
||||
|
||||
def test_sort_option(self):
|
||||
self.cmd('init', '--encryption=repokey', self.repository_location)
|
||||
|
|
Loading…
Reference in a new issue