]> arthur.barton.de Git - bup.git/blobdiff - t/compare-trees
midx-cmd: accommodate python 3
[bup.git] / t / compare-trees
index 32edcde2b2d39f4d009d4936b6b672ffb16b0b2a..aeaa086a86d1fb92b92bdb902cb34166e42abc44 100755 (executable)
@@ -1,11 +1,10 @@
 #!/usr/bin/env bash
 
+set -u
+
 # Test that src and dest trees are as identical as bup is capable of
 # making them.  For now, use rsync -niaHAX ...
 
-set -e
-set -o pipefail
-
 usage() {
 cat <<EOF
 Usage: compare-trees [-h] [-c] [-x] SOURCE DEST
@@ -31,7 +30,7 @@ do
     esac
 done
 
-shift $(($OPTIND - 1))
+shift $(($OPTIND - 1)) || exit $?
 
 if ! test $# -eq 2
 then
@@ -42,22 +41,48 @@ fi
 src="$1"
 dest="$2"
 
-tmpfile="$(mktemp /tmp/bup-test-XXXXXXX)"
-trap "rm -rf '${tmpfile}'" EXIT
+tmpfile="$(mktemp /tmp/bup-test-XXXXXXX)" || exit $?
+trap "rm -rf '$tmpfile'" EXIT || exit $?
 
 rsync_opts="-niaH$verify_content --delete"
 
-if rsync --version | grep -q xattrs; then
-    rsync_opts="$rsync_opts -AX"
+rsync_version=$(rsync --version)
+if [[ ! "$rsync_version" =~ "ACLs" ]] || [[ "$rsync_version" =~ "no ACLs" ]]; then
+    echo "Not comparing ACLs (not supported by available rsync)" 1>&2
 else
-    echo "Not comparing xattrs/acls (unsupported by available rsync)." 1>&2
+    case $OSTYPE in
+        cygwin|darwin|netbsd)
+            echo "Not comparing ACLs (not yet supported on $OSTYPE)" 1>&2
+            ;;
+        *)
+            rsync_opts="$rsync_opts -A"
+            ;;
+    esac
 fi
 
-rsync $rsync_opts "$src" "$dest" > "${tmpfile}"
+xattrs_available=''
+if [[ ! "$rsync_version" =~ "xattrs" ]] || [[ "$rsync_version" =~ "no xattrs" ]]; then
+    echo "Not comparing xattrs (not supported by available rsync)" 1>&2
+else
+    xattrs_available=yes
+fi
+
+# Even in dry-run mode, rsync may fail if -X is specified and the
+# filesystems don't support xattrs.
+
+if test "$xattrs_available"; then
+    rsync $rsync_opts -X "$src" "$dest" > "$tmpfile"
+    if test $? -ne 0; then
+        # Try again without -X
+        rsync $rsync_opts "$src" "$dest" > "$tmpfile" || exit $?
+    fi
+else
+    rsync $rsync_opts "$src" "$dest" > "$tmpfile" || exit $?
+fi
 
-if test $(wc -l < "${tmpfile}") != 0; then
-    echo "Differences between $src and $dest"
-    cat "${tmpfile}"
+if test $(wc -l < "$tmpfile") != 0; then
+    echo "Differences between $src and $dest" 1>&2
+    cat "$tmpfile"
     exit 1
 fi