#!/bin/bash

dstDir=$1
srcRepo=$2
dstRepo=$3
dstDepth=$4
if [ -z "$dstDepth" ]; then
  dstDepth=infinity
fi
svnOpt='--username bne.build@gameloft.com --password HrenVam01 --non-interactive --trust-server-cert'
svnDepth="--depth $dstDepth"

echo Performing automerge in $dstDir from $srcRepo to $dstRepo

if [ -z "$dstDir" -o -z "$srcRepo" -o -z "$dstRepo" ]; then
  echo ERROR: missing script arguments
  echo USAGE: $0 working_directory source_repository destination_repository [ destination_depth ]
  exit 2
fi

# if target directory doesn't exist, perform new checkout
if ! [ -d $dstDir ]; then
  echo Creating destination directory $dstDir
  mkdir -p $dstDir
  echo Performing checkout with $svnDepth from $dstRepo to $dstDir
  svn co $svnOpt $dstRepo $dstDir $svnDepth || exit $?
fi

if [ -f $dstDir/merge_conflicts.log ]; then
  echo Cleaning up log output
  rm $dstDir/merge_conflicts.log
fi

# revert previous changes
echo Reverting previous changes in $dstDir
svn revert $svnOpt -R $dstDir/* || exit $?

# sync to latest
echo Updating with $svnDepth in $dstDir
svn up $svnOpt $dstDir $svnDepth || exit $?

# perform a merge from source repo
cd $dstDir
echo Merging with $svnDepth from $srcRepo in $dstDir
svn merge $svnOpt $svnDepth --accept postpone $srcRepo . || exit $?

# search for conflicts (item, property, tree)
echo Searching for merge conflicts in $dstDir
svn st | grep '^C' > merge_conflicts.log
svn st | grep '^.C' >> merge_conflicts.log
svn st | grep '^..C' >> merge_conflicts.log

# if any conflics reported, exit with error
if [ -s merge_conflicts.log ]; then
  echo Merge conflicts detected!
  cat merge_conflicts.log
  exit 1
fi
rm merge_conflicts.log

# if changes detected, perform commit (exclude externals from detection)
numChanges=`svn st | grep -v '^X' | grep -v '^....X' | grep -v 'Performing status on external' | grep -v '^$' | wc -l`
if ! [ "$numChanges" -eq "0" ]; then
  echo $numChanges new changes detected, performing commit
  svn st
  svn ci $svnOpt -m "- auto merge from $srcRepo to $dstRepo" || exit $?
else
  echo No new changes in $srcRepo
fi

