Commit | Line | Data |
---|---|---|
16edf865 WD |
1 | #! /bin/sh |
2 | ||
3 | # This program is distributable under the terms of the GNU GPL (see | |
4 | # COPYING). | |
5 | ||
6 | # Test that rsync handles basic xattr preservation. | |
7 | ||
8 | . $srcdir/testsuite/rsync.fns | |
9 | ||
10 | $RSYNC --version | grep ", xattrs" >/dev/null || test_skipped "Rsync is configured without xattr support" | |
11 | ||
16edf865 WD |
12 | case "`xattr 2>&1`" in |
13 | *--list:*) | |
14 | xset() { | |
15 | xnam="$1" | |
16 | xval="$2" | |
17 | shift 2 | |
18 | xattr -s "$xnam" "$xval" "${@}" | |
19 | } | |
20 | xls() { | |
21 | xattr -l "${@}" | |
22 | } | |
c0801903 | 23 | RUSR='rsync.nonuser' |
16edf865 WD |
24 | ;; |
25 | *) | |
26 | xset() { | |
27 | xnam="$1" | |
28 | xval="$2" | |
29 | shift 2 | |
30 | setfattr -n "$xnam" -v "$xval" "${@}" | |
31 | } | |
32 | xls() { | |
33 | getfattr -d "${@}" | |
34 | } | |
d724dd18 | 35 | RUSR='user.rsync' |
16edf865 WD |
36 | ;; |
37 | esac | |
38 | ||
b769ad6a | 39 | makepath "$fromdir/foo/bar" |
16edf865 WD |
40 | echo now >"$fromdir/file0" |
41 | echo something >"$fromdir/file1" | |
42 | echo else >"$fromdir/file2" | |
43 | echo deep >"$fromdir/foo/file3" | |
44 | echo normal >"$fromdir/file4" | |
b769ad6a | 45 | echo deeper >"$fromdir/foo/bar/file5" |
16edf865 WD |
46 | |
47 | makepath "$chkdir/foo" | |
48 | echo wow >"$chkdir/file1" | |
844810d6 | 49 | cp_touch "$fromdir/foo/file3" "$chkdir/foo" |
16edf865 | 50 | |
b769ad6a | 51 | files='foo file0 file1 file2 foo/file3 file4 foo/bar/file5' |
16edf865 WD |
52 | |
53 | cd "$fromdir" | |
54 | ||
55 | xset user.foo foo file0 2>/dev/null || test_skipped "Unable to set an xattr" | |
56 | xset user.bar bar file0 | |
57 | ||
58 | xset user.short 'this is short' file1 | |
59 | xset user.long 'this is a long attribute that will be truncated in the initial data send' file1 | |
60 | xset user.good 'this is good' file1 | |
61 | xset user.nice 'this is nice' file1 | |
62 | ||
63 | xset user.foo foo file2 | |
64 | xset user.bar bar file2 | |
65 | xset user.long 'a long attribute for our new file that tests to ensure that this works' file2 | |
66 | ||
67347196 WD |
67 | xset user.dir1 'need to test directory xattrs too' foo |
68 | xset user.dir2 'another xattr' foo | |
69 | xset user.dir3 'this is one last one for the moment' foo | |
70 | ||
b769ad6a WD |
71 | xset user.foo 'new foo' foo/file3 foo/bar/file5 |
72 | xset user.bar 'new bar' foo/file3 foo/bar/file5 | |
73 | xset user.long 'this is also a long attribute that will be truncated in the initial data send' foo/file3 foo/bar/file5 | |
d724dd18 | 74 | xset $RUSR.equal 'this long attribute should remain the same and not need to be transferred' foo/file3 foo/bar/file5 |
16edf865 WD |
75 | |
76 | xset user.short 'old short' "$chkdir/file1" | |
77 | xset user.extra 'remove me' "$chkdir/file1" | |
78 | ||
79 | xset user.foo 'old foo' "$chkdir/foo/file3" | |
d724dd18 | 80 | xset $RUSR.equal 'this long attribute should remain the same and not need to be transferred' "$chkdir/foo/file3" |
16edf865 WD |
81 | |
82 | xls $files >"$scratchdir/xattrs.txt" | |
83 | ||
84 | # OK, let's try a simple xattr copy. | |
c0801903 | 85 | checkit "$RSYNC -avX --super . '$chkdir/'" "$fromdir" "$chkdir" |
16edf865 WD |
86 | |
87 | cd "$chkdir" | |
88 | xls $files | diff $diffopt "$scratchdir/xattrs.txt" - | |
89 | ||
90 | cd "$fromdir" | |
91 | ||
c0801903 | 92 | checkit "$RSYNC -aiX --super --copy-dest=../chk . ../to" "$fromdir" "$todir" |
16edf865 WD |
93 | |
94 | cd "$todir" | |
95 | xls $files | diff $diffopt "$scratchdir/xattrs.txt" - | |
96 | ||
97 | cd "$fromdir" | |
7462c6ac WD |
98 | rm -rf "$todir" |
99 | ||
16edf865 WD |
100 | xset user.nice 'this is nice, but different' file1 |
101 | ||
f8722dba WD |
102 | checkit "$RSYNC -aiX --fake-super . ../chk" "$fromdir" "$chkdir" |
103 | ||
104 | cd "$chkdir" | |
16edf865 WD |
105 | xls $files >"$scratchdir/xattrs.txt" |
106 | ||
f8722dba | 107 | cd "$fromdir" |
d724dd18 | 108 | checkit "$RSYNC -aiX --fake-super --link-dest=../chk . ../to" "$chkdir" "$todir" |
16edf865 WD |
109 | |
110 | cd "$todir" | |
111 | xls $files | diff $diffopt "$scratchdir/xattrs.txt" - | |
112 | ||
c0801903 | 113 | sed -n -e '/\.\/file1$/d' -e '/^[^ ][^ ]* *[^ ][^ ]* *[^ ][^ ]* *1 /p' "$scratchdir/ls-to" >"$scratchdir/ls-diff" |
d724dd18 WD |
114 | if [ -s "$scratchdir/ls-diff" ]; then |
115 | echo "Missing hard links on:" | |
116 | cat "$scratchdir/ls-diff" | |
117 | exit 1 | |
118 | fi | |
119 | ||
7462c6ac WD |
120 | cd "$fromdir" |
121 | rm -rf "$todir" "$chkdir" | |
122 | ||
123 | rsync -aX file1 file2 | |
124 | rsync -aX file1 file2 ../chk/ | |
125 | rsync -aX --del ../chk/ . | |
126 | rsync -aX file1 ../lnk/ | |
127 | ||
128 | xls file1 file2 >"$scratchdir/xattrs.txt" | |
129 | ||
130 | checkit "$RSYNC -aiiX --copy-dest=../lnk . ../to" "$chkdir" "$todir" | |
131 | ||
132 | cd "$todir" | |
133 | xls file1 file2 | diff $diffopt "$scratchdir/xattrs.txt" - | |
134 | ||
135 | cd "$fromdir" | |
136 | rm "$todir/file2" | |
137 | ||
138 | echo extra >file1 | |
6283e9ef | 139 | rsync -aX . ../chk/ |
7462c6ac WD |
140 | |
141 | checkit "$RSYNC -aiiX . ../to" "$chkdir" "$todir" | |
142 | ||
143 | cd "$todir" | |
144 | xls file1 file2 | diff $diffopt "$scratchdir/xattrs.txt" - | |
145 | ||
16edf865 WD |
146 | # The script would have aborted on error, so getting here means we've won. |
147 | exit 0 |