OpenModem/bertos/remote_merge

49 lines
1.3 KiB
Bash
Executable File

#!/bin/bash
#set -x
if [ $# -lt 2 ] ; then
printf "\nMerge remote url commits into local BeRTOS svn repository.\n"
printf "Usage: $0 <REMOTE_URL> <REMOTE_START_REV> [<REMOTE_END_REV>]\n"
printf "If remote end revision is not supplied HEAD will be used.\n"
exit 1
fi
MERGE_URL="$1"
START_REV="$2"
if [ z"$3" = z ] ; then
END_REV=HEAD
else
END_REV="$3"
fi
#Check for local uncommitted modifications
STATUS=`svn status -q`
if [[ z"$STATUS" != z && "${STATUS:0:1}" != $'\n' ]] ; then
printf "Project has local modifications, it must be clean\n"
exit 1
fi
#Get list of revisions to merge.
REV_LIST=`svn log $MERGE_URL -r$START_REV:$END_REV --quiet 2>&1| perl -ne 'if(m/^r([0-9]+)/) {print $1, "\n";}'`
printf "Merged from external project:\n" > header
for rev in $REV_LIST
do
#Get commit log message only
#svn pg --revprop -r$rev svn:log $MERGE_URL > tmp_msg
#Get revision commit log with date and author
svn log -r$rev $MERGE_URL > tmp_msg
#Replace leading and trailing banners "---------------------..."
sed -i 's/^-\+/\*\*\*\*\*\*\*\*\*\*/' tmp_msg
#Indent all message
sed -i 's/\(^.*\)/\t\1/' tmp_msg
cat header tmp_msg > commit_msg
#Try to merge ...
svn merge $MERGE_URL -c$rev || exit 1
#and commit!
svn ci -Fcommit_msg
done
rm -rf header tmp_msg commit_msg