unpack-objects: fix --strict handling
[gitweb.git] / git-merge-resolve.sh
index f0a19b4c8a2ac63a7808bc54975d89a8e031aba1..93bcfc2f5dce418d00f26257788932d5c738785c 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 enhanced multi-base read-tree.
 
 # The first parameters up to -- are merge bases; the rest are heads.
 bases= head= remotes= sep_seen=
@@ -24,49 +25,22 @@ do
        esac
 done
 
-# Give up if we are given more than two remotes -- not handling octopus.
+# Give up if we are given two or more remotes -- not handling octopus.
 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 update-index --refresh 2>/dev/null
+git read-tree -u -m --aggressive $bases $head $remotes || exit 2
 echo "Trying simple merge."
-if result_tree=$(git-write-tree  2>/dev/null)
+if result_tree=$(git write-tree  2>/dev/null)
 then
        exit 0
 else