mirror of
https://github.com/borgbackup/borg.git
synced 2024-12-26 17:57:59 +00:00
assert_dirs_equal: add ignore_bsdflags and ignore_xattrs argument
bsdflags are not supported in the FUSE mount. xattrs are supported, but are tested separately.
This commit is contained in:
parent
f086dad41b
commit
48fa449e39
2 changed files with 16 additions and 10 deletions
|
@ -60,11 +60,11 @@ def assert_creates_file(self, path):
|
||||||
yield
|
yield
|
||||||
self.assert_true(os.path.exists(path), '{} should exist'.format(path))
|
self.assert_true(os.path.exists(path), '{} should exist'.format(path))
|
||||||
|
|
||||||
def assert_dirs_equal(self, dir1, dir2):
|
def assert_dirs_equal(self, dir1, dir2, **kwargs):
|
||||||
diff = filecmp.dircmp(dir1, dir2)
|
diff = filecmp.dircmp(dir1, dir2)
|
||||||
self._assert_dirs_equal_cmp(diff)
|
self._assert_dirs_equal_cmp(diff, **kwargs)
|
||||||
|
|
||||||
def _assert_dirs_equal_cmp(self, diff):
|
def _assert_dirs_equal_cmp(self, diff, ignore_bsdflags=False, ignore_xattrs=False):
|
||||||
self.assert_equal(diff.left_only, [])
|
self.assert_equal(diff.left_only, [])
|
||||||
self.assert_equal(diff.right_only, [])
|
self.assert_equal(diff.right_only, [])
|
||||||
self.assert_equal(diff.diff_files, [])
|
self.assert_equal(diff.diff_files, [])
|
||||||
|
@ -77,7 +77,7 @@ def _assert_dirs_equal_cmp(self, diff):
|
||||||
# Assume path2 is on FUSE if st_dev is different
|
# Assume path2 is on FUSE if st_dev is different
|
||||||
fuse = s1.st_dev != s2.st_dev
|
fuse = s1.st_dev != s2.st_dev
|
||||||
attrs = ['st_mode', 'st_uid', 'st_gid', 'st_rdev']
|
attrs = ['st_mode', 'st_uid', 'st_gid', 'st_rdev']
|
||||||
if has_lchflags:
|
if has_lchflags and not ignore_bsdflags:
|
||||||
attrs.append('st_flags')
|
attrs.append('st_flags')
|
||||||
if not fuse or not os.path.isdir(path1):
|
if not fuse or not os.path.isdir(path1):
|
||||||
# dir nlink is always 1 on our fuse filesystem
|
# dir nlink is always 1 on our fuse filesystem
|
||||||
|
@ -96,11 +96,12 @@ def _assert_dirs_equal_cmp(self, diff):
|
||||||
else:
|
else:
|
||||||
d1.append(round(s1.st_mtime_ns, st_mtime_ns_round))
|
d1.append(round(s1.st_mtime_ns, st_mtime_ns_round))
|
||||||
d2.append(round(s2.st_mtime_ns, st_mtime_ns_round))
|
d2.append(round(s2.st_mtime_ns, st_mtime_ns_round))
|
||||||
|
if not ignore_xattrs:
|
||||||
d1.append(no_selinux(get_all(path1, follow_symlinks=False)))
|
d1.append(no_selinux(get_all(path1, follow_symlinks=False)))
|
||||||
d2.append(no_selinux(get_all(path2, follow_symlinks=False)))
|
d2.append(no_selinux(get_all(path2, follow_symlinks=False)))
|
||||||
self.assert_equal(d1, d2)
|
self.assert_equal(d1, d2)
|
||||||
for sub_diff in diff.subdirs.values():
|
for sub_diff in diff.subdirs.values():
|
||||||
self._assert_dirs_equal_cmp(sub_diff)
|
self._assert_dirs_equal_cmp(sub_diff, ignore_bsdflags=ignore_bsdflags, ignore_xattrs=ignore_xattrs)
|
||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
def fuse_mount(self, location, mountpoint, *options):
|
def fuse_mount(self, location, mountpoint, *options):
|
||||||
|
|
|
@ -1040,11 +1040,16 @@ def has_noatime(some_file):
|
||||||
mountpoint = os.path.join(self.tmpdir, 'mountpoint')
|
mountpoint = os.path.join(self.tmpdir, 'mountpoint')
|
||||||
# mount the whole repository, archive contents shall show up in archivename subdirs of mountpoint:
|
# mount the whole repository, archive contents shall show up in archivename subdirs of mountpoint:
|
||||||
with self.fuse_mount(self.repository_location, mountpoint):
|
with self.fuse_mount(self.repository_location, mountpoint):
|
||||||
self.assert_dirs_equal(self.input_path, os.path.join(mountpoint, 'archive', 'input'))
|
# bsdflags are not supported by the FUSE mount
|
||||||
self.assert_dirs_equal(self.input_path, os.path.join(mountpoint, 'archive2', 'input'))
|
# we also ignore xattrs here, they are tested separately
|
||||||
|
self.assert_dirs_equal(self.input_path, os.path.join(mountpoint, 'archive', 'input'),
|
||||||
|
ignore_bsdflags=True, ignore_xattrs=True)
|
||||||
|
self.assert_dirs_equal(self.input_path, os.path.join(mountpoint, 'archive2', 'input'),
|
||||||
|
ignore_bsdflags=True, ignore_xattrs=True)
|
||||||
# mount only 1 archive, its contents shall show up directly in mountpoint:
|
# mount only 1 archive, its contents shall show up directly in mountpoint:
|
||||||
with self.fuse_mount(self.repository_location + '::archive', mountpoint):
|
with self.fuse_mount(self.repository_location + '::archive', mountpoint):
|
||||||
self.assert_dirs_equal(self.input_path, os.path.join(mountpoint, 'input'))
|
self.assert_dirs_equal(self.input_path, os.path.join(mountpoint, 'input'),
|
||||||
|
ignore_bsdflags=True, ignore_xattrs=True)
|
||||||
# regular file
|
# regular file
|
||||||
in_fn = 'input/file1'
|
in_fn = 'input/file1'
|
||||||
out_fn = os.path.join(mountpoint, 'input', 'file1')
|
out_fn = os.path.join(mountpoint, 'input', 'file1')
|
||||||
|
|
Loading…
Reference in a new issue