#! /bin/sh

function mode {
  ruby -e "printf %Q(%o\n), File.stat(%q($1)).mode"
}

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
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

../pdumpfs src dest
diff -r src dest/$today/src || exit 1

find src |sort | while read srcfile; do
   destfile="dest/$today/$srcfile"
   if test `mode $srcfile` != `mode $destfile`; then
       echo "error: modes of $srcfile and $destfile differ"
       exit 1
   fi
done || exit 1

rm -rf dest2
mkdir dest2
../pdumpfs --exclude-by-size 0 src dest2  # no files should be copied
test `find dest2 -type f | wc -l` = 0 || exit 1

rm -rf dest3
mkdir dest3
../pdumpfs --exclude foo --exclude bar src dest3
test -z "`find dest3 -type f | egrep 'foo|bar'`" || exit 1

rm -rf dest4
mkdir dest4
../pdumpfs --exclude-by-glob 'new*' src dest4
test -z "`find dest4 -type f | egrep new`" || exit 1

echo ok.

rm -rf src dest dest?
exit 0
