rebase -i: Teach "--edit-todo" action

This allows users to edit the todo file while they're stopped in the
middle of an interactive rebase. When this action is executed, all
comments from the original todo file are stripped, and new help messages
are appended to the end.

Signed-off-by: Andrew Wong <andrew.kw.w@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Andrew Wong 2012-09-17 21:28:09 -04:00 committed by Junio C Hamano
parent fcc5ef1cc9
commit eb9a7cb4bd
3 changed files with 32 additions and 3 deletions

View File

@ -12,7 +12,7 @@ SYNOPSIS
[<upstream>] [<branch>] [<upstream>] [<branch>]
'git rebase' [-i | --interactive] [options] [--exec <cmd>] [--onto <newbase>] 'git rebase' [-i | --interactive] [options] [--exec <cmd>] [--onto <newbase>]
--root [<branch>] --root [<branch>]
'git rebase' --continue | --skip | --abort 'git rebase' --continue | --skip | --abort | --edit-todo
DESCRIPTION DESCRIPTION
----------- -----------
@ -245,6 +245,9 @@ leave out at most one of A and B, in which case it defaults to HEAD.
--skip:: --skip::
Restart the rebasing process by skipping the current patch. Restart the rebasing process by skipping the current patch.
--edit-todo::
Edit the todo list during an interactive rebase.
-m:: -m::
--merge:: --merge::
Use merging strategies to rebase. When the recursive (default) merge Use merging strategies to rebase. When the recursive (default) merge

View File

@ -792,6 +792,23 @@ skip)
do_rest do_rest
;; ;;
edit-todo)
sed -e '/^#/d' < "$todo" > "$todo".new
mv -f "$todo".new "$todo"
append_todo_help
cat >> "$todo" << EOF
#
# You are editing the todo file of an ongoing interactive rebase.
# To continue rebase after editing, run:
# git rebase --continue
#
EOF
git_sequence_editor "$todo" ||
die "Could not execute editor"
exit
;;
esac esac
git var GIT_COMMITTER_IDENT >/dev/null || git var GIT_COMMITTER_IDENT >/dev/null ||

View File

@ -8,7 +8,7 @@ OPTIONS_KEEPDASHDASH=
OPTIONS_SPEC="\ OPTIONS_SPEC="\
git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] [<branch>] git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] [<upstream>] [<branch>]
git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>] git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>]
git-rebase --continue | --abort | --skip git-rebase --continue | --abort | --skip | --edit-todo
-- --
Available options are Available options are
v,verbose! display a diffstat of what changed upstream v,verbose! display a diffstat of what changed upstream
@ -38,6 +38,7 @@ C=! passed to 'git apply'
continue! continue continue! continue
abort! abort and check out the original branch abort! abort and check out the original branch
skip! skip current patch and continue skip! skip current patch and continue
edit-todo! edit the todo list during an interactive rebase
" "
. git-sh-setup . git-sh-setup
. git-sh-i18n . git-sh-i18n
@ -190,7 +191,7 @@ do
--verify) --verify)
ok_to_skip_pre_rebase= ok_to_skip_pre_rebase=
;; ;;
--continue|--skip|--abort) --continue|--skip|--abort|--edit-todo)
test $total_argc -eq 2 || usage test $total_argc -eq 2 || usage
action=${1##--} action=${1##--}
;; ;;
@ -306,6 +307,11 @@ then
fi fi
fi fi
if test "$action" = "edit-todo" && test "$type" != "interactive"
then
die "$(gettext "The --edit-todo action can only be used during interactive rebase.")"
fi
case "$action" in case "$action" in
continue) continue)
# Sanity check # Sanity check
@ -338,6 +344,9 @@ abort)
rm -r "$state_dir" rm -r "$state_dir"
exit exit
;; ;;
edit-todo)
run_specific_rebase
;;
esac esac
# Make sure no rebase is in progress # Make sure no rebase is in progress