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
This commit is contained in:
commit
57be46fd21
@ -108,7 +108,6 @@ OPTIONS
|
|||||||
|
|
||||||
--skip::
|
--skip::
|
||||||
Restart the rebasing process by skipping the current patch.
|
Restart the rebasing process by skipping the current patch.
|
||||||
This does not work with the --merge option.
|
|
||||||
|
|
||||||
--merge::
|
--merge::
|
||||||
Use merging strategies to rebase. When the recursive (default) merge
|
Use merging strategies to rebase. When the recursive (default) merge
|
||||||
|
@ -59,15 +59,16 @@ continue_merge () {
|
|||||||
|
|
||||||
if test -n "`git-diff-index HEAD`"
|
if test -n "`git-diff-index HEAD`"
|
||||||
then
|
then
|
||||||
|
printf "Committed: %0${prec}d" $msgnum
|
||||||
git-commit -C "`cat $dotest/current`"
|
git-commit -C "`cat $dotest/current`"
|
||||||
else
|
else
|
||||||
echo "Previous merge succeeded automatically"
|
printf "Already applied: %0${prec}d" $msgnum
|
||||||
fi
|
fi
|
||||||
|
echo ' '`git-rev-list --pretty=oneline -1 HEAD | \
|
||||||
|
sed 's/^[a-f0-9]\+ //'`
|
||||||
|
|
||||||
prev_head=`git-rev-parse HEAD^0`
|
prev_head=`git-rev-parse HEAD^0`
|
||||||
|
|
||||||
# save the resulting commit so we can read-tree on it later
|
# 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"
|
echo "$prev_head" > "$dotest/prev_head"
|
||||||
|
|
||||||
# onto the next patch:
|
# onto the next patch:
|
||||||
@ -82,7 +83,7 @@ call_merge () {
|
|||||||
rv=$?
|
rv=$?
|
||||||
case "$rv" in
|
case "$rv" in
|
||||||
0)
|
0)
|
||||||
git-commit -C "$cmt" || die "commit failed: $MRESOLVEMSG"
|
return
|
||||||
;;
|
;;
|
||||||
1)
|
1)
|
||||||
test -d "$GIT_DIR/rr-cache" && git-rerere
|
test -d "$GIT_DIR/rr-cache" && git-rerere
|
||||||
@ -100,23 +101,6 @@ call_merge () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
finish_rb_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"
|
rm -r "$dotest"
|
||||||
echo "All done."
|
echo "All done."
|
||||||
}
|
}
|
||||||
@ -153,7 +137,18 @@ do
|
|||||||
--skip)
|
--skip)
|
||||||
if test -d "$dotest"
|
if test -d "$dotest"
|
||||||
then
|
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
|
fi
|
||||||
git am -3 --skip --resolvemsg="$RESOLVEMSG"
|
git am -3 --skip --resolvemsg="$RESOLVEMSG"
|
||||||
exit
|
exit
|
||||||
|
@ -37,7 +37,9 @@ test_expect_success \
|
|||||||
test_expect_success \
|
test_expect_success \
|
||||||
'pick top patch from topic branch into master' \
|
'pick top patch from topic branch into master' \
|
||||||
'git-cherry-pick my-topic-branch^0 &&
|
'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 \
|
test_debug \
|
||||||
@ -50,4 +52,13 @@ test_expect_success \
|
|||||||
'rebase topic branch against new master and check git-am did not get halted' \
|
'rebase topic branch against new master and check git-am did not get halted' \
|
||||||
'git-rebase master && test ! -d .dotest'
|
'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
|
test_done
|
||||||
|
61
t/t3403-rebase-skip.sh
Executable file
61
t/t3403-rebase-skip.sh
Executable file
@ -0,0 +1,61 @@
|
|||||||
|
#!/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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user