123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302 |
- #! /bin/sh
- # Copyright (C) 2005 by Wayne Davison <wayned@samba.org>
- # This program is distributable under the terms of the GNU GPL (see
- # COPYING).
- # Test the output of various copy commands to ensure itemized output
- # and double-verbose output is correct.
- . "$suitedir/rsync.fns"
- to2dir="$tmpdir/to2"
- chkfile="$scratchdir/rsync.chk"
- outfile="$scratchdir/rsync.out"
- makepath "$fromdir/foo"
- makepath "$fromdir/bar/baz"
- cp -p "$srcdir/configure.ac" "$fromdir/foo/config1"
- cp -p "$srcdir/config.h.in" "$fromdir/foo/config2"
- cp -p "$srcdir/rsync.h" "$fromdir/bar/baz/rsync"
- chmod 600 "$fromdir"/foo/config? "$fromdir/bar/baz/rsync"
- umask 0
- ln -s ../bar/baz/rsync "$fromdir/foo/sym"
- umask 022
- ln "$fromdir/foo/config1" "$fromdir/foo/extra"
- rm -f "$to2dir"
- # Check if rsync is set to hard-link symlinks.
- if egrep '^#define CAN_HARDLINK_SYMLINK 1' config.h >/dev/null; then
- L=hL
- else
- L=cL
- fi
- # Check if rsync can preserve time on symlinks
- case "$RSYNC" in
- *protocol=2*)
- T=.T
- ;;
- *)
- if $RSYNC --version | grep ", symtimes" >/dev/null; then
- T=.t
- else
- T=.T
- fi
- ;;
- esac
- $RSYNC -iplr "$fromdir/" "$todir/" \
- | tee "$outfile"
- cat <<EOT >"$chkfile"
- cd$all_plus ./
- cd$all_plus bar/
- cd$all_plus bar/baz/
- >f$all_plus bar/baz/rsync
- cd$all_plus foo/
- >f$all_plus foo/config1
- >f$all_plus foo/config2
- >f$all_plus foo/extra
- cL$all_plus foo/sym -> ../bar/baz/rsync
- EOT
- diff $diffopt "$chkfile" "$outfile" || test_fail "test 1 failed"
- # Ensure there are no accidental directory-time problems.
- $RSYNC -a -f '-! */' "$fromdir/" "$todir"
- cp -p "$srcdir/configure.ac" "$fromdir/foo/config2"
- chmod 601 "$fromdir/foo/config2"
- $RSYNC -iplrH "$fromdir/" "$todir/" \
- | tee "$outfile"
- cat <<EOT >"$chkfile"
- >f..T.$dots bar/baz/rsync
- >f..T.$dots foo/config1
- >f.sTp$dots foo/config2
- hf..T.$dots foo/extra => foo/config1
- EOT
- diff $diffopt "$chkfile" "$outfile" || test_fail "test 2 failed"
- $RSYNC -a -f '-! */' "$fromdir/" "$todir"
- sleep 1 # For directory mod below to ensure time difference
- rm "$todir/foo/sym"
- umask 0
- ln -s ../bar/baz "$todir/foo/sym"
- umask 022
- cp -p "$srcdir/config.h.in" "$fromdir/foo/config2"
- chmod 600 "$fromdir/foo/config2"
- chmod 777 "$todir/bar/baz/rsync"
- $RSYNC -iplrtc "$fromdir/" "$todir/" \
- | tee "$outfile"
- cat <<EOT >"$chkfile"
- .f..tp$dots bar/baz/rsync
- .d..t.$dots foo/
- .f..t.$dots foo/config1
- >fcstp$dots foo/config2
- cLc$T.$dots foo/sym -> ../bar/baz/rsync
- EOT
- diff $diffopt "$chkfile" "$outfile" || test_fail "test 3 failed"
- cp -p "$srcdir/configure.ac" "$fromdir/foo/config2"
- chmod 600 "$fromdir/foo/config2"
- # Lack of -t is for unchanged hard-link stress-test!
- $RSYNC -vvplrH "$fromdir/" "$todir/" \
- | tee "$outfile"
- filter_outfile
- cat <<EOT >"$chkfile"
- bar/baz/rsync is uptodate
- foo/config1 is uptodate
- foo/config2
- foo/extra is uptodate
- foo/sym is uptodate
- EOT
- diff $diffopt "$chkfile" "$outfile" || test_fail "test 4 failed"
- chmod 747 "$todir/bar/baz/rsync"
- $RSYNC -a -f '-! */' "$fromdir/" "$todir"
- $RSYNC -ivvplrtH "$fromdir/" "$todir/" \
- | tee "$outfile"
- filter_outfile
- cat <<EOT >"$chkfile"
- .d$allspace ./
- .d$allspace bar/
- .d$allspace bar/baz/
- .f...p$dots bar/baz/rsync
- .d$allspace foo/
- .f$allspace foo/config1
- >f..t.$dots foo/config2
- hf$allspace foo/extra
- .L$allspace foo/sym -> ../bar/baz/rsync
- EOT
- diff $diffopt "$chkfile" "$outfile" || test_fail "test 5 failed"
- chmod 757 "$todir/foo/config1"
- touch "$todir/foo/config2"
- $RSYNC -vplrtH "$fromdir/" "$todir/" \
- | tee "$outfile"
- filter_outfile
- cat <<EOT >"$chkfile"
- foo/config2
- EOT
- diff $diffopt "$chkfile" "$outfile" || test_fail "test 6 failed"
- chmod 757 "$todir/foo/config1"
- touch "$todir/foo/config2"
- $RSYNC -iplrtH "$fromdir/" "$todir/" \
- | tee "$outfile"
- cat <<EOT >"$chkfile"
- .f...p$dots foo/config1
- >f..t.$dots foo/config2
- EOT
- diff $diffopt "$chkfile" "$outfile" || test_fail "test 7 failed"
- $RSYNC -ivvplrtH --copy-dest=../to "$fromdir/" "$to2dir/" \
- | tee "$outfile"
- filter_outfile
- case `tail -1 "$outfile"` in
- cLc.t*)
- sym_dots="c.t.$dots"
- L_sym_dots="cL$sym_dots"
- is_uptodate='-> ../bar/baz/rsync'
- echo "cL$sym_dots foo/sym $is_uptodate" >"$chkfile.extra"
- L=cL
- ;;
- *)
- sym_dots="$allspace"
- L_sym_dots=".L$allspace"
- is_uptodate='is uptodate'
- touch "$chkfile.extra"
- ;;
- esac
- cat <<EOT >"$chkfile"
- cd$allspace ./
- cd$allspace bar/
- cd$allspace bar/baz/
- cf$allspace bar/baz/rsync
- cd$allspace foo/
- cf$allspace foo/config1
- cf$allspace foo/config2
- hf$allspace foo/extra => foo/config1
- cL$sym_dots foo/sym -> ../bar/baz/rsync
- EOT
- diff $diffopt "$chkfile" "$outfile" || test_fail "test 8 failed"
- rm -rf "$to2dir"
- $RSYNC -iplrtH --copy-dest=../to "$fromdir/" "$to2dir/" \
- | tee "$outfile"
- cat - "$chkfile.extra" <<EOT >"$chkfile"
- hf$allspace foo/extra => foo/config1
- EOT
- diff $diffopt "$chkfile" "$outfile" || test_fail "test 9 failed"
- rm -rf "$to2dir"
- $RSYNC -vvplrtH --copy-dest="$todir" "$fromdir/" "$to2dir/" \
- | tee "$outfile"
- filter_outfile
- cat <<EOT >"$chkfile"
- ./ is uptodate
- bar/ is uptodate
- bar/baz/ is uptodate
- bar/baz/rsync is uptodate
- foo/ is uptodate
- foo/config1 is uptodate
- foo/config2 is uptodate
- foo/extra => foo/config1
- foo/sym $is_uptodate
- EOT
- diff $diffopt "$chkfile" "$outfile" || test_fail "test 10 failed"
- rm -rf "$to2dir"
- $RSYNC -ivvplrtH --link-dest="$todir" "$fromdir/" "$to2dir/" \
- | tee "$outfile"
- filter_outfile
- cat <<EOT >"$chkfile"
- cd$allspace ./
- cd$allspace bar/
- cd$allspace bar/baz/
- hf$allspace bar/baz/rsync
- cd$allspace foo/
- hf$allspace foo/config1
- hf$allspace foo/config2
- hf$allspace foo/extra => foo/config1
- $L$sym_dots foo/sym -> ../bar/baz/rsync
- EOT
- diff $diffopt "$chkfile" "$outfile" || test_fail "test 11 failed"
- rm -rf "$to2dir"
- $RSYNC -iplrtH --dry-run --link-dest=../to "$fromdir/" "$to2dir/" \
- | tee "$outfile"
- cat - "$chkfile.extra" <<EOT >"$chkfile"
- EOT
- diff $diffopt "$chkfile" "$outfile" || test_fail "test 12 failed"
- rm -rf "$to2dir"
- $RSYNC -iplrtH --link-dest=../to "$fromdir/" "$to2dir/" \
- | tee "$outfile"
- cat - "$chkfile.extra" <<EOT >"$chkfile"
- EOT
- diff $diffopt "$chkfile" "$outfile" || test_fail "test 13 failed"
- rm -rf "$to2dir"
- $RSYNC -vvplrtH --link-dest="$todir" "$fromdir/" "$to2dir/" \
- | tee "$outfile"
- filter_outfile
- cat <<EOT >"$chkfile"
- ./ is uptodate
- bar/ is uptodate
- bar/baz/ is uptodate
- bar/baz/rsync is uptodate
- foo/ is uptodate
- foo/config1 is uptodate
- foo/config2 is uptodate
- foo/extra is uptodate
- foo/sym $is_uptodate
- EOT
- diff $diffopt "$chkfile" "$outfile" || test_fail "test 14 failed"
- rm -rf "$to2dir"
- $RSYNC -ivvplrtH --compare-dest="$todir" "$fromdir/" "$to2dir/" \
- | tee "$outfile"
- filter_outfile
- cat <<EOT >"$chkfile"
- cd$allspace ./
- cd$allspace bar/
- cd$allspace bar/baz/
- .f$allspace bar/baz/rsync
- cd$allspace foo/
- .f$allspace foo/config1
- .f$allspace foo/config2
- .f$allspace foo/extra
- $L_sym_dots foo/sym -> ../bar/baz/rsync
- EOT
- diff $diffopt "$chkfile" "$outfile" || test_fail "test 15 failed"
- rm -rf "$to2dir"
- $RSYNC -iplrtH --compare-dest="$todir" "$fromdir/" "$to2dir/" \
- | tee "$outfile"
- cat - "$chkfile.extra" <<EOT >"$chkfile"
- EOT
- diff $diffopt "$chkfile" "$outfile" || test_fail "test 16 failed"
- rm -rf "$to2dir"
- $RSYNC -vvplrtH --compare-dest="$todir" "$fromdir/" "$to2dir/" \
- | tee "$outfile"
- filter_outfile
- cat <<EOT >"$chkfile"
- ./ is uptodate
- bar/ is uptodate
- bar/baz/ is uptodate
- bar/baz/rsync is uptodate
- foo/ is uptodate
- foo/config1 is uptodate
- foo/config2 is uptodate
- foo/extra is uptodate
- foo/sym $is_uptodate
- EOT
- diff $diffopt "$chkfile" "$outfile" || test_fail "test 17 failed"
- # The script would have aborted on error, so getting here means we've won.
- exit 0
|