提交 57be46fd 编写于 作者: J Junio C Hamano

Merge branch 'ew/rebase'

* ew/rebase:
  rebase: allow --skip to work with --merge
  rebase: cleanup rebasing with --merge
  rebase: allow --merge option to handle patches merged upstream
......@@ -108,7 +108,6 @@ OPTIONS
--skip::
Restart the rebasing process by skipping the current patch.
This does not work with the --merge option.
--merge::
Use merging strategies to rebase. When the recursive (default) merge
......
......@@ -59,15 +59,16 @@ continue_merge () {
if test -n "`git-diff-index HEAD`"
then
printf "Committed: %0${prec}d" $msgnum
git-commit -C "`cat $dotest/current`"
else
echo "Previous merge succeeded automatically"
printf "Already applied: %0${prec}d" $msgnum
fi
echo ' '`git-rev-list --pretty=oneline -1 HEAD | \
sed 's/^[a-f0-9]\+ //'`
prev_head=`git-rev-parse HEAD^0`
# save the resulting commit so we can read-tree on it later
echo "$prev_head" > "$dotest/cmt.$msgnum.result"
echo "$prev_head" > "$dotest/prev_head"
# onto the next patch:
......@@ -82,7 +83,7 @@ call_merge () {
rv=$?
case "$rv" in
0)
git-commit -C "$cmt" || die "commit failed: $MRESOLVEMSG"
return
;;
1)
test -d "$GIT_DIR/rr-cache" && git-rerere
......@@ -100,23 +101,6 @@ call_merge () {
}
finish_rb_merge () {
set -e
msgnum=1
echo "Finalizing rebased commits..."
git-reset --hard "`cat $dotest/onto`"
end="`cat $dotest/end`"
while test "$msgnum" -le "$end"
do
git-read-tree `cat "$dotest/cmt.$msgnum.result"`
git-checkout-index -q -f -u -a
git-commit -C "`cat $dotest/cmt.$msgnum`"
printf "Committed %0${prec}d" $msgnum
echo ' '`git-rev-list --pretty=oneline -1 HEAD | \
sed 's/^[a-f0-9]\+ //'`
msgnum=$(($msgnum + 1))
done
rm -r "$dotest"
echo "All done."
}
......@@ -153,7 +137,18 @@ do
--skip)
if test -d "$dotest"
then
die "--skip is not supported when using --merge"
prev_head="`cat $dotest/prev_head`"
end="`cat $dotest/end`"
msgnum="`cat $dotest/msgnum`"
msgnum=$(($msgnum + 1))
onto="`cat $dotest/onto`"
while test "$msgnum" -le "$end"
do
call_merge "$msgnum"
continue_merge
done
finish_rb_merge
exit
fi
git am -3 --skip --resolvemsg="$RESOLVEMSG"
exit
......
......@@ -37,7 +37,9 @@ test_expect_success \
test_expect_success \
'pick top patch from topic branch into master' \
'git-cherry-pick my-topic-branch^0 &&
git-checkout -f my-topic-branch
git-checkout -f my-topic-branch &&
git-branch master-merge master &&
git-branch my-topic-branch-merge my-topic-branch
'
test_debug \
......@@ -50,4 +52,13 @@ test_expect_success \
'rebase topic branch against new master and check git-am did not get halted' \
'git-rebase master && test ! -d .dotest'
if test -z "$no_python"
then
test_expect_success \
'rebase --merge topic branch that was partially merged upstream' \
'git-checkout -f my-topic-branch-merge &&
git-rebase --merge master-merge &&
test ! -d .git/.dotest-merge'
fi
test_done
#!/bin/sh
#
# Copyright (c) 2006 Eric Wong
#
test_description='git rebase --merge --skip tests'
. ./test-lib.sh
# we assume the default git-am -3 --skip strategy is tested independently
# and always works :)
if test "$no_python"; then
echo "Skipping: no python => no recursive merge"
test_done
exit 0
fi
test_expect_success setup '
echo hello > hello &&
git add hello &&
git commit -m "hello" &&
git branch skip-reference &&
echo world >> hello &&
git commit -a -m "hello world" &&
echo goodbye >> hello &&
git commit -a -m "goodbye" &&
git checkout -f skip-reference &&
echo moo > hello &&
git commit -a -m "we should skip this" &&
echo moo > cow &&
git add cow &&
git commit -m "this should not be skipped" &&
git branch pre-rebase skip-reference &&
git branch skip-merge skip-reference
'
test_expect_failure 'rebase with git am -3 (default)' 'git rebase master'
test_expect_success 'rebase --skip with am -3' '
git reset --hard HEAD &&
git rebase --skip
'
test_expect_success 'checkout skip-merge' 'git checkout -f skip-merge'
test_expect_failure 'rebase with --merge' 'git rebase --merge master'
test_expect_success 'rebase --skip with --merge' '
git reset --hard HEAD &&
git rebase --skip
'
test_expect_success 'merge and reference trees equal' \
'test -z "`git-diff-tree skip-merge skip-reference`"'
test_debug 'gitk --all & sleep 1'
test_done
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册