#! /bin/sh function mode_type { ruby -e "printf %Q(%o:%s\n), File.stat(%q($1)).mode, File.ftype(%q($1))" } rm -rf src dest mkdir dest cp -rp data src cd src ln -s foo foobar cd .. today=`date +%Y/%m/%d` yesterday=`date --date '1 day ago' +%Y/%m/%d` ../pdumpfs src dest > tmp.log || exit 1 diff -r src dest/$today/src || exit 1 mv dest/$today dest/$yesterday echo update > src/foo mkdir src/newdir echo newfile > src/newdir/newfile echo newfile2 > src/newfile2 rm -f src/bar # change a real file to a symlink rm src/file cd src ln -s foo file cd .. ../pdumpfs src dest > tmp.log || exit 1 diff -r src dest/$today/src || exit 1 grep '^unchanged' tmp.log | perl -pe 's/^unchanged\s+//' | while read i; do i1=`ls -i dest/$yesterday/$i` i2=`ls -i dest/$today/$i` test "$i1" = "$i2" || exit 1 done rm -f tmp.log find src |sort | while read srcfile; do destfile="dest/$today/$srcfile" if test "`mode_type $srcfile`" != "`mode_type $destfile`"; then echo "error: modes of $srcfile and $destfile differ" exit 1 fi done || exit 1 rm -rf dest2 mkdir dest2 # no files should be copied ../pdumpfs --exclude-by-size 0 src dest2 > tmp.log || exit 1 test `find dest2 -type f | wc -l` = 0 || exit 1 rm -rf dest3 mkdir dest3 ../pdumpfs --exclude foo --exclude bar src dest3 > tmp.log || exit 1 test -z "`find dest3 -type f | egrep 'foo|bar'`" || exit 1 rm -rf dest4 mkdir dest4 ../pdumpfs --exclude-by-glob 'new*' src dest4 > tmp.log || exit 1 test -z "`find dest4 -type f | egrep new`" || exit 1 rm -rf src dest dest? echo ok. exit 0