#!/bin/sh

# Some stuff to randomly put in revised textfiles, simulating an edit
WORDLIST="barcode braid greynetic maze mountain pacman triangle vidwhacker wander"

# Create the repository
WD=`pwd`
CVSROOT=$HOME/cvs_test_repos
export CVSROOT

# Clean up old stuff
if [ -d $CVSROOT ]; then
  if [ ! -z $SystemDrive ]; then
    echo "Must be a PC"
    chmod -R u+w $HOME/cvs_test_repos
  fi
  rm -rf $CVSROOT
fi
rm -rf cvs_test_*

echo "MAKING REPOSITORY $CVSROOT"
mkdir -p $CVSROOT
cvs -d $CVSROOT init
echo "CREATED $CVSROOT"

echo "MAKING FILETREE"
# Make some files to put in the repository
mkdir -p cvs_test
cd cvs_test
$WD/mktest

echo "IMPORTING FILETREE"
# Import it
cvs -d $CVSROOT import -m "Imported" cvs_test BEGIN baseline-1_1_1
if [ $? != 0 ]; then
  echo "Import failed"
  exit 1
fi
echo "IMPORT FINISHED"
cd $WD
# clean up import directory
rm -rf cvs_test*

echo "CHECKING OUT TRUNK"
# Check out the trunk
cvs -d $CVSROOT co -d cvs_test_trunk cvs_test

echo "First revision on trunk"
# Make a modification on trunk
cd cvs_test_trunk
$WD/modtest
# Random
R=`echo $WORDLIST | gawk '{print $((systime()%NF)+1)}'`
echo $R > FT
cvs add FT
cvs commit -m "First revision on trunk"
cd $WD

# Branch
echo "MAKING BRANCH A"
cvs -d $CVSROOT rtag -b BranchA cvs_test
echo "CHECKING OUT BRANCH"
cvs -d $CVSROOT co -r BranchA -d cvs_test_branchA cvs_test
cd cvs_test_branchA
# Random
R=`echo $WORDLIST | gawk '{print $((systime()%NF)+1)}'`
echo $R > FA
cvs add FA
cvs commit -m "Add file F3 on BranchA"
cd $WD

# Make modifications on branch and trunk
echo "Second revision on trunk"
cd cvs_test_trunk
$WD/modtest
cvs commit -m "Second revision on trunk"

echo "First revision on Branch A"
cd $WD/cvs_test_branchA
$WD/modtest
cvs commit -m "First revision on Branch A"
cd $WD

# Make another modification on each
echo "Third revision on trunk"
cd cvs_test_trunk
$WD/modtest
cvs commit -m "Third revision on trunk"

echo "Second revision on Branch A"
cd $WD/cvs_test_branchA
$WD/modtest
cvs commit -m "Second revision on Branch A"
cd $WD

# Branch off of the branch
echo "MAKING BRANCH AA"
cvs -d $CVSROOT rtag -r BranchA -b BranchAA cvs_test
echo "CHECKING OUT BRANCH AA"
cvs -d $CVSROOT co -r BranchAA -d cvs_test_branchAA cvs_test

# Make a change on that branch
cd cvs_test_branchAA
$WD/modtest
# Random
R=`echo $WORDLIST | gawk '{print $((systime()%NF)+1)}'`
echo $R > FAA
cvs add FAA
rm FT; cvs delete FT
cvs commit -m "Changes on Branch AA"
cd $WD

# Branch
echo "MAKING BRANCH B"
cvs rtag -b BranchB cvs_test
echo "CHECKING OUT BRANCH B"
cvs -d $CVSROOT co -r BranchB -d cvs_test_branchB cvs_test
cd cvs_test_branchB
$WD/modtest
# Random
R=`echo $WORDLIST | gawk '{print $((systime()%NF)+1)}'`
echo $R > FB
cvs add FB
cvs commit -m "Add file FB on BranchB"
cd $WD

#### Stop here if you don't want the merges ####
# exit 

cd $WD/cvs_test_trunk
echo "MERGING A -> trunk for file File1"
cvs update -j BranchA File1
# Resolve conflicts
sed -n '/^[a-z]/p' File1 > tmp; mv -f tmp File1
cvs ci -m "Merged to trunk from BranchA" File1

cd $WD/cvs_test_branchB
echo "Merging trunk -> BranchB for file File1"
cvs update -j HEAD File1
# Resolve conflicts
sed -n '/^[a-z]/p' File1 > tmp; mv -f tmp File1
cvs ci -m "Merged from trunk to BranchB" File1

# Make tags for tag-based merge arrow
cd $WD/cvs_test_trunk
cvs tag -r 1.2.2.2.2.1 mergeto_BranchA_20Nov08 File1
cvs tag -r 1.2.2.2 mergefrom_BranchAA_20Nov08 File1
cd $WD

