rebase: factor out sub command handling

Factor out the common parts of the handling of the sub commands
'--continue', '--skip' and '--abort'. The '--abort' handling can
handled completely in git-rebase.sh.

After this refactoring, the calls to git-rebase--am.sh,
git-rebase--merge.sh and git-rebase--interactive.sh will be better
aligned. There will only be one call to interactive rebase that will
shortcut the very last part of git-rebase.sh.

Signed-off-by: Martin von Zweigbergk <martin.von.zweigbergk@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Martin von Zweigbergk 2011-02-06 13:43:52 -05:00 committed by Junio C Hamano
parent 4974c2caa2
commit 2959c28366
2 changed files with 18 additions and 33 deletions

View File

@ -509,9 +509,7 @@ do_next () {
test -s "$todo" && return test -s "$todo" && return
comment_for_reflog finish && comment_for_reflog finish &&
head_name=$(cat "$state_dir"/head-name) && shortonto=$(git rev-parse --short $onto) &&
orig_head=$(cat "$state_dir"/head) &&
shortonto=$(git rev-parse --short $(cat "$state_dir"/onto)) &&
newhead=$(git rev-parse HEAD) && newhead=$(git rev-parse HEAD) &&
case $head_name in case $head_name in
refs/*) refs/*)
@ -521,7 +519,7 @@ do_next () {
;; ;;
esac && { esac && {
test ! -f "$state_dir"/verbose || test ! -f "$state_dir"/verbose ||
git diff-tree --stat $(cat "$state_dir"/head)..HEAD git diff-tree --stat $orig_head..HEAD
} && } &&
{ {
test -s "$rewritten_list" && test -s "$rewritten_list" &&
@ -655,14 +653,6 @@ rearrange_squash () {
case "$action" in case "$action" in
continue) continue)
get_saved_options get_saved_options
comment_for_reflog continue
# Sanity check
git rev-parse --verify HEAD >/dev/null ||
die "Cannot read HEAD"
git update-index --ignore-submodules --refresh &&
git diff-files --quiet --ignore-submodules ||
die "Working tree is dirty"
# do we have anything to commit? # do we have anything to commit?
if git diff-index --cached --quiet --ignore-submodules HEAD -- if git diff-index --cached --quiet --ignore-submodules HEAD --
@ -693,30 +683,12 @@ first and then run 'git rebase --continue' again."
require_clean_work_tree "rebase" require_clean_work_tree "rebase"
do_rest do_rest
;; ;;
abort)
get_saved_options
comment_for_reflog abort
git rerere clear
head_name=$(cat "$state_dir"/head-name)
orig_head=$(cat "$state_dir"/head)
case $head_name in
refs/*)
git symbolic-ref HEAD $head_name
;;
esac &&
output git reset --hard $orig_head &&
rm -rf "$state_dir"
exit
;;
skip) skip)
get_saved_options get_saved_options
comment_for_reflog skip
git rerere clear git rerere clear
output git reset --hard && do_rest do_rest
;; ;;
esac esac

View File

@ -70,7 +70,12 @@ test "$(git config --bool rebase.autosquash)" = "true" && autosquash=t
read_basic_state () { read_basic_state () {
head_name=$(cat "$state_dir"/head-name) && head_name=$(cat "$state_dir"/head-name) &&
onto=$(cat "$state_dir"/onto) && onto=$(cat "$state_dir"/onto) &&
orig_head=$(cat "$state_dir"/orig-head) && if test "$type" = interactive
then
orig_head=$(cat "$state_dir"/head)
else
orig_head=$(cat "$state_dir"/orig-head)
fi &&
GIT_QUIET=$(cat "$state_dir"/quiet) GIT_QUIET=$(cat "$state_dir"/quiet)
} }
@ -262,11 +267,19 @@ test $# -gt 2 && usage
if test -n "$action" if test -n "$action"
then then
test -z "$in_progress" && die "No rebase in progress?" test -z "$in_progress" && die "No rebase in progress?"
test "$type" = interactive && run_specific_rebase # Only interactive rebase uses detailed reflog messages
if test "$type" = interactive && test "$GIT_REFLOG_ACTION" = rebase
then
GIT_REFLOG_ACTION="rebase -i ($action)"
export GIT_REFLOG_ACTION
fi
fi fi
case "$action" in case "$action" in
continue) continue)
# Sanity check
git rev-parse --verify HEAD >/dev/null ||
die "Cannot read HEAD"
git update-index --ignore-submodules --refresh && git update-index --ignore-submodules --refresh &&
git diff-files --quiet --ignore-submodules || { git diff-files --quiet --ignore-submodules || {
echo "You must edit all merge conflicts and then" echo "You must edit all merge conflicts and then"