#!/bin/sh -e

BASE_DIR=/opt/svn/checkouts/trunk
# BASE_DIR=$HOME/Projects/Subversion/svn-trunk

SVN=${BASE_DIR}/subversion/svn/svn
SVNSERVE=${BASE_DIR}/subversion/svnserve/svnserve
SVNADMIN=${BASE_DIR}/subversion/svnadmin/svnadmin
alias svn='echo "Use \$SVN." # '
alias svnserve='echo "Use \$SVNSERVE." # '
alias svnadmin='echo "Use \$SVNADMIN." # '

svnserve_port=$(($RANDOM+1024))
# URL=http://localhost/SOMETHING/repos
# URL=svn://localhost:$svnserve_port/repos
URL=file:///`pwd`/repos

rm -rf repos wc* import-me

${SVNADMIN} create repos
echo "[general]" > repos/conf/svnserve.conf
echo "anon-access = write" >> repos/conf/svnserve.conf
echo "auth-access = write" >> repos/conf/svnserve.conf

svnserve_pid=''
clean_exit() {
  set +e
  [[ -n "$svnserve_pid" ]] && kill -9 "$svnserve_pid"
}
trap clean_exit EXIT

rm -f .svnserve_pid
${SVNSERVE} --listen-port $svnserve_port --pid-file .svnserve_pid -d -r `pwd`
while [[ ! -r .svnserve_pid ]]; do sleep 0.01; done
svnserve_pid=`cat .svnserve_pid`

echo "### Making a Greek Tree for import..."
mkdir import-me
mkdir import-me/trunk
mkdir import-me/branches
echo "This is the file 'iota'."        > import-me/trunk/iota
echo "### Done."
echo ""
echo "### Importing it..."
(cd import-me; ${SVN} import -q -m "Initial import." ${URL})
echo "### Done."
echo ""

echo '### Branching in r2.'
${SVN} cp ${URL}/trunk ${URL}/branches/fb -m "Copy in r2"

echo '### Checking out trunk and branch.'
${SVN} co ${URL}/trunk wc-trunk
${SVN} co ${URL}/branches/fb wc-fb

echo '### Add a file to branch in r3.'
echo "New branch file." >wc-fb/b-iota
$SVN add wc-fb/b-iota
$SVN ci wc-fb -m "Add b-iota in r3"

echo '### Delete a file from trunk in r4.'
$SVN rm wc-trunk/iota
$SVN ci wc-trunk -m "Delete iota in r4"

echo '### Merge everything to fb in r5.'
(cd wc-fb;
 $SVN up;
 $SVN merge $URL/trunk;
 $SVN ci -m "merge to fb in r5"
)

echo '### Restore trunk file in r6.'
echo "Renewed iota" >wc-trunk/iota
$SVN add wc-trunk/iota
$SVN ci wc-trunk -m "re-add iota in r6"

echo '### Reintegrate; iota should be left alone.'
(cd wc-trunk;
 $SVN up;
 $SVN merge --reintegrate $URL/branches/fb
)
