summaryrefslogtreecommitdiff
path: root/git-merge-octopus.sh
diff options
context:
space:
mode:
Diffstat (limited to 'git-merge-octopus.sh')
-rwxr-xr-xgit-merge-octopus.sh43
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