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 exec
This commit is contained in:
Junio C Hamano 2011-10-05 12:35:52 -07:00
commit 2c46103931
2 changed files with 40 additions and 4 deletions

View File

@ -472,18 +472,24 @@ do_next () {
git rev-parse --verify HEAD > "$state_dir"/stopped-sha
${SHELL:-@SHELL_PATH@} -c "$rest" # Actual execution
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
then
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
warn " git rebase --continue"
warn
exit "$status"
fi
# Run in subshell because require_clean_work_tree can die.
if ! (require_clean_work_tree "rebase")
elif test "$dirty" = t
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
warn " git rebase --continue"
@ -647,8 +653,24 @@ continue)
then
: Nothing to commit -- skip this
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" ||
die "Cannot find the author identity"
die "Error trying to find the author identity to amend commit"
current_head=
if test -f "$amend"
then

View File

@ -527,6 +527,20 @@ test_expect_success 'auto-amend only edited commits after "edit"' '
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' '
grandparent=$(git rev-parse HEAD~2) &&
git checkout $(git rev-parse HEAD) &&