#!/bin/dash

# (C) 2006 IST
# License: GPL-2

#$1 - Nome do tar.gz
#$2 - Directoria a testar

usage () {
    echo "Grabs a tar.gz file, calculates the MD5 of its contents,"
    echo "fills a directory with copies and a MD5 file for all files"
    echo "usage $0: [--fill|--check] name.tar.gz directory"
}

erro () {
    echo Erro Inesperado 
    exit 1
}

# Fill directory with contencts of tar.gz
#$1 - Nome do tar.gz
#$2 - Directoria a encher
#$3 - files.md5
fillinner () {
    local FILESTAR=$1
    local TESTDIR=$2
    local FILESMD5=$3
    cd $TESTDIR
    for M in 0 1 2 3 4 5 6 7 8 9 ; do
	mkdir $M || return 1
	cd $TESTDIR/$M || return 1
	tar --totals -xzf $FILESTAR 2> /dev/null || return 1
	chown -R $USER:$USER .	
	cd $TESTDIR
	cat $FILESMD5|tr '*' ' '|awk "{print \$1 \" *\" \"$M/\" \$2 ; }">>all.md5
    done
    return 0
}

# Fill directory with contencts of tar.gz
#$1 - Nome do tar.gz
#$2 - Directoria a encher
fill () {
    local FILESTAR=$1
    local TESTDIR=$2
    echo "Preparing"
    cd $TESTDIR
    mkdir tmp
    cd tmp
    tar --totals -xzf $FILESTAR
    cfv -Crr -t md5 -f files.md5
    cd $TESTDIR
    mv tmp/files.md5 .
    > all.md5
    rm -r tmp
    echo "Filling"
    N=1
    echo -n "Filled "
    while true ; do
	DIR=`printf "%08d" $N`
	mkdir $DIR || break
	cd $DIR || break
	fillinner $FILESTAR $TESTDIR/$DIR $TESTDIR/files.md5 || break
	cd $TESTDIR
	echo -n "$N "
	N=$(( $N + 1 ))
    done
    echo
    cd $TESTDIR 
    echo $DIR $PWD
    rm -r $DIR
}


#$1 - Directoria a testar
check () {
    local TESTDIR=$1
    cd $TESTDIR > /dev/null
    echo "Start md5sum check"
    ls -d 0* | xargs -i dash -c "cd {} ; echo -n {} ; if md5sum --status -c all.md5 ; then echo ' OK - Integrity Verified' ; else echo ' Failed - Integrity not Verified' ; fi"
}


# Main

case $1 in
    --fill)
	shift
	FILESTAR=$1
	TESTDIR=$2
	fill $FILESTAR $TESTDIR
	;;
    --check)
	shift 
	FILESTAR=$1
	TESTDIR=$2
	check $TESTDIR
	;;
    *)
	FILESTAR=$1
	TESTDIR=$2
	time $0 --fill $FILESTAR $TESTDIR
	$0 --check $FILESTAR $TESTDIR
esac
