#!/bin/bash

svnlook="/opt/apache/bin/svnlook"
svnadmin="/opt/apache/bin/svnadmin"

repository_base="/home/svn"

LOCAL_REPLICA="/var/svn-replica"
REMOTE_REPLICA="var/svn-replica"
REPLICA_SERVER="192.168.1.1/$REMOTE_REPLICA"

PROJECTS="ccbench mine hwscan rock-linux rockplug rock-handbook gsmp sane-avision flyspray"

try_to_find_revision()
{
	dir=$LOCAL_REPLICA/$NAME/
	mkdir -p $dir

	# first try to get the needed revision dump
	echo "rsync -z rsync://$REPLICA_SERVER/$NAME/$REV $dir"
	rsync -z rsync://$REPLICA_SERVER/$NAME/$REV $dir 2>&1 > /dev/null
	rsync -z rsync://$REPLICA_SERVER/$NAME/$REV-done $dir 2>&1 > /dev/null

	[ -f $dir/$REV-done -a -f $dir/$REV ] || return -1

        # check if this is the correct next revision
        file_rev="`grep 'Revision-number: ' $dir/$REV | \
                   sed 's/Revision-number: //'`"

        echo "In-Filename revision: $file_rev"
        echo "Repsotitory needs: $REV"

        # only load if the revision match
	if [ $REV = $file_rev ] ; then
        	echo "All revisions ok: revision $REV"
                $svnadmin load $REPOS < $dir/$REV
                rm -v $dir/$REV{,-done}
        else
                echo "Revisin mis-match ..."
        fi
	return 0
}

for NAME in $PROJECTS ; do
	REPOS="$repository_base/$NAME" 

	echo $REPOS
      
	REV="`$svnlook youngest $REPOS`"
	if [ "$REV" ] ; then	
		REV=$(( REV + 1 ))

		echo $REPOS needs $REV

		while try_to_find_revision ; do
		  REV=$(( REV + 1 ))
		  echo "Succeeded! Now it needs $REV ..."
		done
	else
		echo "Error: Can't access repository!"
	fi
done

