Skip to content

Commit

Permalink
octopus: do not do AND'ed merge base.
Browse files Browse the repository at this point in the history
When doing an octopus, we incorrectly used the previous merge
base as the reference to compute next merge base.  This was
unnecessary, because that can never be better than using the
original HEAD.  And that is far simpler as well ;-).

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Nov 11, 2005
1 parent ff56fe1 commit 17cf939
Showing 1 changed file with 20 additions and 5 deletions.
25 changes: 20 additions & 5 deletions git-merge-octopus.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
# Resolve two or more trees.
#

LF='
'

# The first parameters up to -- are merge bases; the rest are heads.
bases= head= remotes= sep_seen=
for arg
Expand Down Expand Up @@ -42,14 +45,18 @@ CNT=1 ;# counting our head
NON_FF_MERGE=0
for SHA1 in $remotes
do
common=$(git-merge-base $MRC $SHA1) ||
common=$(git-merge-base --all $MRC $SHA1) ||
die "Unable to find common commit with $SHA1"

if test "$common" = $SHA1
then
case "$common" in
?*"$LF"?*)
die "Not trivially mergeable."
;;
$SHA1)
echo "Already up-to-date with $SHA1"
continue
fi
;;
esac

CNT=`expr $CNT + 1`
PARENT="$PARENT -p $SHA1"
Expand Down Expand Up @@ -79,7 +86,15 @@ do
exit 2 ; # Automatic merge failed; should not be doing Octopus
next=$(git-write-tree 2>/dev/null)
fi
MRC=$common

# We have merged the other branch successfully. Ideally
# we could implement OR'ed heads in merge-base, and keep
# a list of commits we have merged so far in MRC to feed
# them to merge-base, but we approximate it by keep using
# the current MRC. We used to update it to $common, which
# was incorrectly doing AND'ed merge-base here, which was
# unneeded.

MRT=$next
done

Expand Down

0 comments on commit 17cf939

Please sign in to comment.