From c625bec2e5ddfbf2288555074f1cd14537b9832e Mon Sep 17 00:00:00 2001 From: Rob Browning Date: Tue, 5 Nov 2013 16:29:53 -0600 Subject: [PATCH] Add current-filesystem and path-filesystems to t/lib.sh; use to guard test. Add current-filesystem which reports the current filesystem type, and path-filesystems which reports all the filesystems back up to the root, and use the latter to skip the "save --strip-path (no match)" test whenever all the filesystems involved aren't the same type. This issue was discovered while testing on /some/ext4/tree/containing/a/btrfs/tree. When the test indexes/saves, it picks up the metadata for the parents above the btrfs, which may have (for example) linux +e attrs. Then when it tries to restore the tree fully within the btrfs, the restore defers an error when it tries to restore the +e, which isn't valid for btrfs. Normally we can avoid this problem via --strip, but this particular test is actually checking the behavior when --strip doesn't apply. Signed-off-by: Rob Browning --- t/lib.sh | 23 ++++++++++++++++++++++- t/test.sh | 10 ++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/t/lib.sh b/t/lib.sh index 4640379..c0a6278 100644 --- a/t/lib.sh +++ b/t/lib.sh @@ -1,4 +1,4 @@ -# Assumes shell is Bash. +# Assumes shell is Bash, and pipefail is set. force-delete() { @@ -35,3 +35,24 @@ realpath() "import sys, bup.helpers; print bup.helpers.realpath(sys.stdin.readline())" \ || return $? } + +current-filesystem() +{ + df -T . | awk 'END{print $2}' +} + +path-filesystems() +( + # Return filesystem for each dir from $1 to /. + # Perhaps for /foo/bar, "ext4\next4\nbtrfs\n". + test "$#" -eq 1 || exit $? + cd "$1" || exit $? + current-filesystem || exit $? + dir="$(pwd)" || exit $? + while test "$dir" != /; do + cd .. || exit $? + dir="$(pwd)" || exit $? + current-filesystem || exit $? + done + exit 0 +) diff --git a/t/test.sh b/t/test.sh index 8cadb08..98b3ef3 100755 --- a/t/test.sh +++ b/t/test.sh @@ -459,6 +459,16 @@ WVSTART "save --strip-path (absolute)" WVSTART "save --strip-path (no match)" ( + if test $(WVPASS path-filesystems . | WVPASS sort -u | WVPASS wc -l) -ne 1 + then + # Skip the test because the attempt to restore parent dirs to + # the current filesystem may fail -- i.e. running from + # /foo/ext4/bar/btrfs will fail when bup tries to restore + # linux attrs above btrfs to the restore tree *inside* btrfs. + echo "(running from tree with mixed filesystems; skipping test)" 1>&2 + exit 0 + fi + tmp=graft-points.tmp WVPASS force-delete $tmp WVPASS mkdir $tmp -- 2.39.2