It appears that rsync may fail, even during a --dry-run, if -X is
specified and the filesystem doesn't support xattrs.
Thanks to Greg Troxel for reporting the problem and helping test the
solution.
Signed-off-by: Rob Browning <rlb@defaultvalue.org>
# Test that src and dest trees are as identical as bup is capable of
# making them. For now, use rsync -niaHAX ...
# Test that src and dest trees are as identical as bup is capable of
# making them. For now, use rsync -niaHAX ...
if [[ ! "$rsync_version" =~ "xattrs" ]] || [[ "$rsync_version" =~ "no xattrs" ]]; then
echo "Not comparing xattrs (not supported by available rsync)" 1>&2
else
if [[ ! "$rsync_version" =~ "xattrs" ]] || [[ "$rsync_version" =~ "no xattrs" ]]; then
echo "Not comparing xattrs (not supported by available rsync)" 1>&2
else
- rsync_opts="$rsync_opts -X"
-rsync $rsync_opts "$src" "$dest" > "$tmpfile" || exit $?
+# 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
if test $(wc -l < "$tmpfile") != 0; then
echo "Differences between $src and $dest" 1>&2