#!/bin/sh
# svn-clone - mirror a SVN repository with history using svnsync

src=$1
dst=$2

if [ ! "$src" ]; then
	echo "Usage: ${0##*/} <src-url> [dst-dir]"
	exit 2
fi

if [ ! "$dst" ]; then
	dst=$src
	while case $dst in */) true;; *) false;; esac; do
		dst=${dst%/}
	done
	dst=${dst##*/}.svn
fi

lib=$(which libfunsync.so 2>/dev/null)

if [ "$lib" ]; then
	export LD_PRELOAD=${LD_PRELOAD}${LD_PRELOAD:+:}$lib
else
	echo "Warning: libfunsync not available, sync will be slow"
fi

echo "Cloning to ${dst}..."

dsturl=file://$(readlink -f "$dst")

if [ ! -e "$dst/format" ]; then
	echo "Creating empty local repository..."
	svnadmin create "$dst"
fi

if [ ! -e "$dst/hooks/pre-revprop-change" ]; then
	echo "Installing pre-revprop-change hook..."
	ln -s $(which true) "$dst/hooks/pre-revprop-change"
fi

if ! grep -qs "^svn:sync-from-url" "$dst/db/revprops/0/0"; then
	echo "Initializing svnsync..."
	svnsync init "$dsturl" "$src"

	uuid=$(svnlook propget --revprop -r 0 "$dst" "svn:sync-from-uuid")
	if [ "$uuid" ]; then
		echo "Setting local repository UUID to $uuid..."
		svnadmin setuuid "$dst" "$uuid"
	fi
fi

echo "Synchronizing local repository..."
svnsync sync "$dsturl" "$src"
