Merge branch 'mm/rebase-i-exec-edit'
* mm/rebase-i-exec-edit: rebase -i: notice and warn if "exec $cmd" modifies the index or the working tree rebase -i: clean error message for --continue after failed execmaint
commit
2c46103931
|
@ -472,18 +472,24 @@ do_next () {
|
||||||
git rev-parse --verify HEAD > "$state_dir"/stopped-sha
|
git rev-parse --verify HEAD > "$state_dir"/stopped-sha
|
||||||
${SHELL:-@SHELL_PATH@} -c "$rest" # Actual execution
|
${SHELL:-@SHELL_PATH@} -c "$rest" # Actual execution
|
||||||
status=$?
|
status=$?
|
||||||
|
# Run in subshell because require_clean_work_tree can die.
|
||||||
|
dirty=f
|
||||||
|
(require_clean_work_tree "rebase" 2>/dev/null) || dirty=t
|
||||||
if test "$status" -ne 0
|
if test "$status" -ne 0
|
||||||
then
|
then
|
||||||
warn "Execution failed: $rest"
|
warn "Execution failed: $rest"
|
||||||
|
test "$dirty" = f ||
|
||||||
|
warn "and made changes to the index and/or the working tree"
|
||||||
|
|
||||||
warn "You can fix the problem, and then run"
|
warn "You can fix the problem, and then run"
|
||||||
warn
|
warn
|
||||||
warn " git rebase --continue"
|
warn " git rebase --continue"
|
||||||
warn
|
warn
|
||||||
exit "$status"
|
exit "$status"
|
||||||
fi
|
elif test "$dirty" = t
|
||||||
# Run in subshell because require_clean_work_tree can die.
|
|
||||||
if ! (require_clean_work_tree "rebase")
|
|
||||||
then
|
then
|
||||||
|
warn "Execution succeeded: $rest"
|
||||||
|
warn "but left changes to the index and/or the working tree"
|
||||||
warn "Commit or stash your changes, and then run"
|
warn "Commit or stash your changes, and then run"
|
||||||
warn
|
warn
|
||||||
warn " git rebase --continue"
|
warn " git rebase --continue"
|
||||||
|
@ -647,8 +653,24 @@ continue)
|
||||||
then
|
then
|
||||||
: Nothing to commit -- skip this
|
: Nothing to commit -- skip this
|
||||||
else
|
else
|
||||||
|
if ! test -f "$author_script"
|
||||||
|
then
|
||||||
|
die "You have staged changes in your working tree. If these changes are meant to be
|
||||||
|
squashed into the previous commit, run:
|
||||||
|
|
||||||
|
git commit --amend
|
||||||
|
|
||||||
|
If they are meant to go into a new commit, run:
|
||||||
|
|
||||||
|
git commit
|
||||||
|
|
||||||
|
In both case, once you're done, continue with:
|
||||||
|
|
||||||
|
git rebase --continue
|
||||||
|
"
|
||||||
|
fi
|
||||||
. "$author_script" ||
|
. "$author_script" ||
|
||||||
die "Cannot find the author identity"
|
die "Error trying to find the author identity to amend commit"
|
||||||
current_head=
|
current_head=
|
||||||
if test -f "$amend"
|
if test -f "$amend"
|
||||||
then
|
then
|
||||||
|
|
|
@ -527,6 +527,20 @@ test_expect_success 'auto-amend only edited commits after "edit"' '
|
||||||
git rebase --abort
|
git rebase --abort
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'clean error after failed "exec"' '
|
||||||
|
test_tick &&
|
||||||
|
test_when_finished "git rebase --abort || :" &&
|
||||||
|
(
|
||||||
|
FAKE_LINES="1 exec_false" &&
|
||||||
|
export FAKE_LINES &&
|
||||||
|
test_must_fail git rebase -i HEAD^
|
||||||
|
) &&
|
||||||
|
echo "edited again" > file7 &&
|
||||||
|
git add file7 &&
|
||||||
|
test_must_fail git rebase --continue 2>error &&
|
||||||
|
grep "You have staged changes in your working tree." error
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'rebase a detached HEAD' '
|
test_expect_success 'rebase a detached HEAD' '
|
||||||
grandparent=$(git rev-parse HEAD~2) &&
|
grandparent=$(git rev-parse HEAD~2) &&
|
||||||
git checkout $(git rev-parse HEAD) &&
|
git checkout $(git rev-parse HEAD) &&
|
||||||
|
|
Loading…
Reference in New Issue