#!/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 ... usage() { cat <&2; exit 1;; esac done shift $(($OPTIND - 1)) || exit $? if ! test $# -eq 2 then usage 1>&2 exit 1 fi src="$1" dest="$2" tmpfile="$(mktemp /tmp/bup-test-XXXXXXX)" || exit $? trap "rm -rf '$tmpfile'" EXIT || exit $? rsync_opts="-niaH$verify_content --delete" 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 case $OSTYPE in cygwin|darwin|netbsd) echo "Not comparing ACLs (not yet supported on $OSTYPE)" 1>&2 ;; *) rsync_opts="$rsync_opts -A" ;; esac fi 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" 1>&2 cat "$tmpfile" exit 1 fi exit 0