#!/bin/bash -x

svn --version
svnadmin --version


echo "###########################################"
echo "### Attempting most simple reproduction ###"
echo "###########################################"
mkdir simple
pushd simple

svnadmin create repo
svn checkout file://`pwd`/repo wc

echo "Create basic repo structure"
cd wc
mkdir branches tags trunk
svn add branches tags trunk
svn commit -m "basic repo structure"

echo "Navigate to trunk"
cd trunk

echo "Create initial project layout"
mkdir -p Program
svn add Program
svn commit -m "Initial project layout"

echo "Create branch"
cd ..
cd branches
svn cp ^/trunk/Program Program_rc1
svn commit -m "initialize integration branch"

echo "add new feature"
cd Program_rc1
mkdir -p treeconflict
svn add treeconflict
svn commit -m "add new feature"

echo "Reintegrating feature to trunk"
cd ../../trunk/Program
svn up
svn merge --reintegrate ^/branches/Program_rc1 .
svn commit -m "Reintegrating feature to trunk"

echo "Rebaselining feature from trunk"
cd ../../branches/Program_rc1
svn up
svn merge ^/trunk/Program .
echo "We have a tree conflict!!!"
#svn commit -m "Rebaselining feature from trunk"


popd


echo "################################################"
echo "### Attempting to show real world use issue. ###"
echo "################################################"
mkdir someWhatRealWorldApplication
pushd someWhatRealWorldApplication

svnadmin create repo
svn checkout file://`pwd`/repo wc

echo "Create basic repo structure"
cd wc
mkdir branches tags trunk
svn add branches tags trunk
svn commit -m "basic repo structure"

echo "Navigate to trunk"
cd trunk

echo "Create initial project layout"
mkdir -p Program/foo Program/bar Program/bla
svn add Program
svn commit -m "Initial project layout"

echo "Create integration/team branch structure"
cd ..
cd branches
mkdir -p int usr/andy usr/bob usr/charlie usr/david
svn add int usr
svn commit -m "create integration/team branch structure"

echo "initialize integration branch"
cd int
svn cp ^/trunk/Program Program_rc1
svn commit -m "initialize integration branch"

echo "create usr branch main line & branch"
cd ../usr/andy
svn cp ^/branches/int/Program_rc1 Program_rc1_main_line
svn cp Program_rc1_main_line Program_rc1_new_feature
svn commit -m "create usr branch main line & branch"

echo "add new feature"
cd Program_rc1_new_feature
mkdir -p treeconflict/burr treeconflict/snburr treeconflict/snurr
svn add treeconflict
svn commit -m "add new feature"

echo "Perform downstream merging"
cd ../Program_rc1_main_line
svn up
svn merge ^/branches/int/Program_rc1 .
svn commit -m "Rebaselining usr/andy main line from integration main line"

cd ../Program_rc1_new_feature
svn up
svn merge ^/branches/usr/andy/Program_rc1_main_line .
svn commit -m "Rebaselining usr/andy feature from andy's main line"

cd ../Program_rc1_main_line
svn up
svn merge --reintegrate ^/branches/usr/andy/Program_rc1_new_feature .
svn commit -m "Reintegrating usr/andy feature to andy's main line"

cd ../../../int/Program_rc1
svn up
svn merge --reintegrate ^/branches/usr/andy/Program_rc1_main_line .
svn commit -m "Reintegrating usr/andy main line to integration main line"

echo "Perform additional downstream merging"
cd ../../usr/andy/Program_rc1_main_line
svn up
svn merge ^/branches/int/Program_rc1 .
echo "We have a tree conflict!!!"
svn status
#svn commit -m "Rebaselining usr/andy main line from integration main line"

