#!/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