X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=git-merge-resolve.sh;h=0a8ef216cb8a45df7f900a0c9698bec3e4bb47bb;hb=138086a72582620e0b3ec0aa60a78da208e89a2a;hp=f0a19b4c8a2ac63a7808bc54975d89a8e031aba1;hpb=91063bbc6c4187184e94ebc4ab2b807e6d53cd0a;p=git.git diff --git a/git-merge-resolve.sh b/git-merge-resolve.sh index f0a19b4c..0a8ef216 100755 --- a/git-merge-resolve.sh +++ b/git-merge-resolve.sh @@ -1,8 +1,9 @@ #!/bin/sh # # Copyright (c) 2005 Linus Torvalds +# Copyright (c) 2005 Junio C Hamano # -# Resolve two trees. +# Resolve two trees, using enhancd multi-base read-tree. # The first parameters up to -- are merge bases; the rest are heads. bases= head= remotes= sep_seen= @@ -30,41 +31,14 @@ case "$remotes" in exit 2 ;; esac -# Find an optimum merge base if there are more than one candidates. -case "$bases" in -?*' '?*) - echo "Trying to find the optimum merge base." - G=.tmp-index$$ - best= - best_cnt=-1 - for c in $bases - do - rm -f $G - GIT_INDEX_FILE=$G git-read-tree -m $c $head $remotes \ - 2>/dev/null || continue - # Count the paths that are unmerged. - cnt=`GIT_INDEX_FILE=$G git-ls-files --unmerged | wc -l` - if test $best_cnt -le 0 -o $cnt -le $best_cnt - then - best=$c - best_cnt=$cnt - if test "$best_cnt" -eq 0 - then - # Cannot do any better than all trivial merge. - break - fi - fi - done - rm -f $G - common="$best" - ;; -*) - common="$bases" - ;; -esac +# Give up if this is a baseless merge. +if test '' = "$bases" +then + exit 2 +fi git-update-index --refresh 2>/dev/null -git-read-tree -u -m $common $head $remotes || exit 2 +git-read-tree -u -m --aggressive $bases $head $remotes || exit 2 echo "Trying simple merge." if result_tree=$(git-write-tree 2>/dev/null) then