On Wednesday 11 April 2007, lsuvkne@onemodel.org wrote:
> >>> Eli Carter <eli.carter@commprove.com> 04/11/07 1:25 pm >>>
> >What about wrapping svn merge in a script to check for the problematic
> >case and fixing up the problem?
> >Eli
>
>
> Thanks for the suggestion. Do you mean something doing like this?:
[snip]
This should detect the existance of a problem, but does not automate the
correction.
This detects the merge of deletions where the file being deleted has changed.
This is a little more general than the rename case, since you may have a file
that is just deleted on the branch, but modified on trunk... and it's not
clear you should still delete the file in that case.
So without further ado, a bash function (watch out for line wrapping):
function advanced_merge(){
branch="$1"
trunk=`svn info | grep ^URL: | sed 's/^URL: //'`
revisions=`svn log --xml --stop-on-copy $branch | grep -A
1 "^<logentry$" | grep revision | sed 's/.*"\([0-9]\+\)".*/\1/g'`
newest=`echo "$revisions" | head -1`
oldest=`echo "$revisions" | tail -1`
echo "advanced_merge: $revisions"
mergeoutput=`svn merge -r$oldest:$newest $branch .`
echo "$mergeoutput"
conflict_count=`echo "$mergeoutput" | grep -e "^C" | wc -l`
# For all deleted files, verify that the version deleted on the branch is
# the same version as what is being merged into on trunk. If not, we have
# a conflict.
deletedfiles=`echo "$mergeoutput" | grep ^D | cut -c6-`
for f in $deletedfiles; do
branchrev=`svn info $branch/$f@$oldest | grep "Last Changed Rev"`
trunkrev=`svn info $trunk/$f | grep "Last Changed Rev"`
if [ "$branchrev" != "$trunkrev" ]; then
echo "Conflict on \"$f\", changes lost."
conflict_count=`expr $conflict_count + 1`
fi
done
return $conflict_count
}
Usage:
svn switch your working copy to trunk (or whatever you are merging into), and
do advanced_merge <branch_url>
I have not tested this thoroughly... but hope this will get discussion moving
on a client-side work-around.
Comments? In particular, does this catch the cases we're interested in? Does
it give false positives?
Eli
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@subversion.tigris.org
For additional commands, e-mail: users-help@subversion.tigris.org
Received on Thu Apr 12 21:43:59 2007