git-svn: rebuild convenience and bugfixes
[git.git] / git-merge-resolve.sh
index f0a19b4..0a8ef21 100755 (executable)
@@ -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