diff options
Diffstat (limited to 'git-merge-octopus.sh')
-rwxr-xr-x | git-merge-octopus.sh | 43 |
1 files changed, 19 insertions, 24 deletions
diff --git a/git-merge-octopus.sh b/git-merge-octopus.sh index eb3f473d5a..8643f74cb0 100755 --- a/git-merge-octopus.sh +++ b/git-merge-octopus.sh @@ -44,9 +44,8 @@ esac # MRC is the current "merge reference commit" # MRT is the current "merge result tree" -MRC=$head MSG= PARENT="-p $head" -MRT=$(git-write-tree) -CNT=1 ;# counting our head +MRC=$(git rev-parse --verify -q $head) +MRT=$(git write-tree) NON_FF_MERGE=0 OCTOPUS_FAILURE=0 for SHA1 in $remotes @@ -61,19 +60,22 @@ do exit 2 esac - common=$(git-merge-base --all $MRC $SHA1) || - die "Unable to find common commit with $SHA1" + eval pretty_name=\${GITHEAD_$SHA1:-$SHA1} + if test "$SHA1" = "$pretty_name" + then + SHA1_UP="$(echo "$SHA1" | tr a-z A-Z)" + eval pretty_name=\${GITHEAD_$SHA1_UP:-$pretty_name} + fi + common=$(git merge-base --all $SHA1 $MRC) || + die "Unable to find common commit with $pretty_name" case "$LF$common$LF" in *"$LF$SHA1$LF"*) - echo "Already up-to-date with $SHA1" + echo "Already up-to-date with $pretty_name" continue ;; esac - CNT=`expr $CNT + 1` - PARENT="$PARENT -p $SHA1" - if test "$common,$NON_FF_MERGE" = "$MRC,0" then # The first head being merged was a fast-forward. @@ -81,33 +83,26 @@ do # tree as the intermediate result of the merge. # We still need to count this as part of the parent set. - echo "Fast forwarding to: $SHA1" - git-read-tree -u -m $head $SHA1 || exit - MRC=$SHA1 MRT=$(git-write-tree) + echo "Fast-forwarding to: $pretty_name" + git read-tree -u -m $head $SHA1 || exit + MRC=$SHA1 MRT=$(git write-tree) continue fi NON_FF_MERGE=1 - echo "Trying simple merge with $SHA1" - git-read-tree -u -m --aggressive $common $MRT $SHA1 || exit 2 - next=$(git-write-tree 2>/dev/null) + echo "Trying simple merge with $pretty_name" + git read-tree -u -m --aggressive $common $MRT $SHA1 || exit 2 + next=$(git write-tree 2>/dev/null) if test $? -ne 0 then echo "Simple merge did not work, trying automatic merge." git-merge-index -o git-merge-one-file -a || OCTOPUS_FAILURE=1 - next=$(git-write-tree 2>/dev/null) + next=$(git write-tree 2>/dev/null) fi - # 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. - + MRC="$MRC $SHA1" MRT=$next done |