123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- #! /bin/sh
- # This program is distributable under the terms of the GNU GPL (see
- # COPYING).
- # Test that rsync handles basic xattr preservation.
- . $srcdir/testsuite/rsync.fns
- $RSYNC --version | grep ", xattrs" >/dev/null || test_skipped "Rsync is configured without xattr support"
- case "`xattr 2>&1`" in
- *--list:*)
- xset() {
- xnam="$1"
- xval="$2"
- shift 2
- xattr -s "$xnam" "$xval" "${@}"
- }
- xls() {
- xattr -l "${@}"
- }
- RUSR='rsync.nonuser'
- ;;
- *)
- xset() {
- xnam="$1"
- xval="$2"
- shift 2
- setfattr -n "$xnam" -v "$xval" "${@}"
- }
- xls() {
- getfattr -d "${@}"
- }
- RUSR='user.rsync'
- ;;
- esac
- makepath "$fromdir/foo/bar"
- echo now >"$fromdir/file0"
- echo something >"$fromdir/file1"
- echo else >"$fromdir/file2"
- echo deep >"$fromdir/foo/file3"
- echo normal >"$fromdir/file4"
- echo deeper >"$fromdir/foo/bar/file5"
- makepath "$chkdir/foo"
- echo wow >"$chkdir/file1"
- cp_touch "$fromdir/foo/file3" "$chkdir/foo"
- files='foo file0 file1 file2 foo/file3 file4 foo/bar/file5'
- cd "$fromdir"
- xset user.foo foo file0 2>/dev/null || test_skipped "Unable to set an xattr"
- xset user.bar bar file0
- xset user.short 'this is short' file1
- xset user.long 'this is a long attribute that will be truncated in the initial data send' file1
- xset user.good 'this is good' file1
- xset user.nice 'this is nice' file1
- xset user.foo foo file2
- xset user.bar bar file2
- xset user.long 'a long attribute for our new file that tests to ensure that this works' file2
- xset user.dir1 'need to test directory xattrs too' foo
- xset user.dir2 'another xattr' foo
- xset user.dir3 'this is one last one for the moment' foo
- xset user.foo 'new foo' foo/file3 foo/bar/file5
- xset user.bar 'new bar' foo/file3 foo/bar/file5
- xset user.long 'this is also a long attribute that will be truncated in the initial data send' foo/file3 foo/bar/file5
- xset $RUSR.equal 'this long attribute should remain the same and not need to be transferred' foo/file3 foo/bar/file5
- xset user.short 'old short' "$chkdir/file1"
- xset user.extra 'remove me' "$chkdir/file1"
- xset user.foo 'old foo' "$chkdir/foo/file3"
- xset $RUSR.equal 'this long attribute should remain the same and not need to be transferred' "$chkdir/foo/file3"
- xls $files >"$scratchdir/xattrs.txt"
- # OK, let's try a simple xattr copy.
- checkit "$RSYNC -avX --super . '$chkdir/'" "$fromdir" "$chkdir"
- cd "$chkdir"
- xls $files | diff $diffopt "$scratchdir/xattrs.txt" -
- cd "$fromdir"
- checkit "$RSYNC -aiX --super --copy-dest=../chk . ../to" "$fromdir" "$todir"
- cd "$todir"
- xls $files | diff $diffopt "$scratchdir/xattrs.txt" -
- cd "$fromdir"
- rm -rf "$todir"
- xset user.nice 'this is nice, but different' file1
- checkit "$RSYNC -aiX --fake-super . ../chk" "$fromdir" "$chkdir"
- cd "$chkdir"
- xls $files >"$scratchdir/xattrs.txt"
- cd "$fromdir"
- checkit "$RSYNC -aiX --fake-super --link-dest=../chk . ../to" "$chkdir" "$todir"
- cd "$todir"
- xls $files | diff $diffopt "$scratchdir/xattrs.txt" -
- sed -n -e '/\.\/file1$/d' -e '/^[^ ][^ ]* *[^ ][^ ]* *[^ ][^ ]* *1 /p' "$scratchdir/ls-to" >"$scratchdir/ls-diff"
- if [ -s "$scratchdir/ls-diff" ]; then
- echo "Missing hard links on:"
- cat "$scratchdir/ls-diff"
- exit 1
- fi
- cd "$fromdir"
- rm -rf "$todir" "$chkdir"
- $RSYNC -aX file1 file2
- $RSYNC -aX file1 file2 ../chk/
- $RSYNC -aX --del ../chk/ .
- $RSYNC -aX file1 ../lnk/
- xls file1 file2 >"$scratchdir/xattrs.txt"
- checkit "$RSYNC -aiiX --copy-dest=../lnk . ../to" "$chkdir" "$todir"
- cd "$todir"
- xls file1 file2 | diff $diffopt "$scratchdir/xattrs.txt" -
- cd "$fromdir"
- rm "$todir/file2"
- echo extra >file1
- $RSYNC -aX . ../chk/
- checkit "$RSYNC -aiiX . ../to" "$chkdir" "$todir"
- cd "$todir"
- xls file1 file2 | diff $diffopt "$scratchdir/xattrs.txt" -
- # The script would have aborted on error, so getting here means we've won.
- exit 0
|