Merge branch 'sb/maint-octopus' into maint

* sb/maint-octopus:
  octopus: remove dead code
  octopus: reenable fast-forward merges
  octopus: make merge process simpler to follow

Conflicts:
	git-merge-octopus.sh
This commit is contained in:
Junio C Hamano 2010-01-20 13:02:24 -08:00
commit ce67b3eed8
2 changed files with 57 additions and 9 deletions

View File

@ -44,9 +44,8 @@ esac
# MRC is the current "merge reference commit" # MRC is the current "merge reference commit"
# MRT is the current "merge result tree" # MRT is the current "merge result tree"
MRC=$head MSG= PARENT="-p $head" MRC=$(git rev-parse --verify -q $head)
MRT=$(git write-tree) MRT=$(git write-tree)
CNT=1 ;# counting our head
NON_FF_MERGE=0 NON_FF_MERGE=0
OCTOPUS_FAILURE=0 OCTOPUS_FAILURE=0
for SHA1 in $remotes for SHA1 in $remotes
@ -61,19 +60,17 @@ do
exit 2 exit 2
esac esac
eval pretty_name=\${GITHEAD_$SHA1:-$SHA1}
common=$(git merge-base --all $SHA1 $MRC) || common=$(git merge-base --all $SHA1 $MRC) ||
die "Unable to find common commit with $SHA1" die "Unable to find common commit with $pretty_name"
case "$LF$common$LF" in case "$LF$common$LF" in
*"$LF$SHA1$LF"*) *"$LF$SHA1$LF"*)
echo "Already up-to-date with $SHA1" echo "Already up-to-date with $pretty_name"
continue continue
;; ;;
esac esac
CNT=`expr $CNT + 1`
PARENT="$PARENT -p $SHA1"
if test "$common,$NON_FF_MERGE" = "$MRC,0" if test "$common,$NON_FF_MERGE" = "$MRC,0"
then then
# The first head being merged was a fast-forward. # The first head being merged was a fast-forward.
@ -81,7 +78,7 @@ do
# tree as the intermediate result of the merge. # tree as the intermediate result of the merge.
# We still need to count this as part of the parent set. # We still need to count this as part of the parent set.
echo "Fast-forwarding to: $SHA1" echo "Fast-forwarding to: $pretty_name"
git read-tree -u -m $head $SHA1 || exit git read-tree -u -m $head $SHA1 || exit
MRC=$SHA1 MRT=$(git write-tree) MRC=$SHA1 MRT=$(git write-tree)
continue continue
@ -89,7 +86,7 @@ do
NON_FF_MERGE=1 NON_FF_MERGE=1
echo "Trying simple merge with $SHA1" echo "Trying simple merge with $pretty_name"
git read-tree -u -m --aggressive $common $MRT $SHA1 || exit 2 git read-tree -u -m --aggressive $common $MRT $SHA1 || exit 2
next=$(git write-tree 2>/dev/null) next=$(git write-tree 2>/dev/null)
if test $? -ne 0 if test $? -ne 0

View File

@ -49,4 +49,55 @@ test_expect_success 'merge c1 with c2, c3, c4, ... c29' '
done done
' '
cat >expected <<\EOF
Trying simple merge with c2
Trying simple merge with c3
Trying simple merge with c4
Merge made by octopus.
c2.c | 1 +
c3.c | 1 +
c4.c | 1 +
3 files changed, 3 insertions(+), 0 deletions(-)
create mode 100644 c2.c
create mode 100644 c3.c
create mode 100644 c4.c
EOF
test_expect_success 'merge output uses pretty names' '
git reset --hard c1 &&
git merge c2 c3 c4 >actual &&
test_cmp actual expected
'
cat >expected <<\EOF
Already up-to-date with c4
Trying simple merge with c5
Merge made by octopus.
c5.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 c5.c
EOF
test_expect_success 'merge up-to-date output uses pretty names' '
git merge c4 c5 >actual &&
test_cmp actual expected
'
cat >expected <<\EOF
Fast-forwarding to: c1
Trying simple merge with c2
Merge made by octopus.
c1.c | 1 +
c2.c | 1 +
2 files changed, 2 insertions(+), 0 deletions(-)
create mode 100644 c1.c
create mode 100644 c2.c
EOF
test_expect_success 'merge fast-forward output uses pretty names' '
git reset --hard c0 &&
git merge c1 c2 >actual &&
test_cmp actual expected
'
test_done test_done