t3404: todo list with commented-out commands only aborts
[gitweb.git] / git-rebase--interactive.sh
index 299ded21375ed3146052b9887dd2b56216404105..b68f108f28dafb779ceaf2b0f255fe0db291b038 100644 (file)
@@ -28,49 +28,6 @@ case "$comment_char" in
        ;;
 esac
 
-orig_reflog_action="$GIT_REFLOG_ACTION"
-
-comment_for_reflog () {
-       case "$orig_reflog_action" in
-       ''|rebase*)
-               GIT_REFLOG_ACTION="rebase -i ($1)"
-               export GIT_REFLOG_ACTION
-               ;;
-       esac
-}
-
-append_todo_help () {
-       gettext "
-Commands:
-p, pick <commit> = use commit
-r, reword <commit> = use commit, but edit the commit message
-e, edit <commit> = use commit, but stop for amending
-s, squash <commit> = use commit, but meld into previous commit
-f, fixup <commit> = like \"squash\", but discard this commit's log message
-x, exec <command> = run command (the rest of the line) using shell
-d, drop <commit> = remove commit
-l, label <label> = label current HEAD with a name
-t, reset <label> = reset HEAD to a label
-m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
-.       create a merge commit using the original merge commit's
-.       message (or the oneline, if no original merge commit was
-.       specified). Use -c <commit> to reword the commit message.
-
-These lines can be re-ordered; they are executed from top to bottom.
-" | git stripspace --comment-lines >>"$todo"
-
-       if test $(get_missing_commit_check_level) = error
-       then
-               gettext "
-Do not remove any line. Use 'drop' explicitly to remove a commit.
-" | git stripspace --comment-lines >>"$todo"
-       else
-               gettext "
-If you remove a line here THAT COMMIT WILL BE LOST.
-" | git stripspace --comment-lines >>"$todo"
-       fi
-}
-
 die_abort () {
        apply_autostash
        rm -rf "$state_dir"
@@ -102,13 +59,6 @@ collapse_todo_ids() {
        git rebase--helper --shorten-ids
 }
 
-# Switch to the branch in $into and notify it in the reflog
-checkout_onto () {
-       GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name"
-       output git checkout $onto || die_abort "$(gettext "could not detach HEAD")"
-       git update-ref ORIG_HEAD $orig_head
-}
-
 get_missing_commit_check_level () {
        check_level=$(git config --get rebase.missingCommitsCheck)
        check_level=${check_level:-ignore}
@@ -140,22 +90,7 @@ initiate_action () {
                     --continue
                ;;
        edit-todo)
-               git stripspace --strip-comments <"$todo" >"$todo".new
-               mv -f "$todo".new "$todo"
-               collapse_todo_ids
-               append_todo_help
-               gettext "
-You are editing the todo file of an ongoing interactive rebase.
-To continue rebase after editing, run:
-    git rebase --continue
-
-" | git stripspace --comment-lines >>"$todo"
-
-               git_sequence_editor "$todo" ||
-                       die "$(gettext "Could not execute editor")"
-               expand_todo_ids
-
-               exit
+               exec git rebase--helper --edit-todo
                ;;
        show-current-patch)
                exec git show REBASE_HEAD --
@@ -166,19 +101,6 @@ To continue rebase after editing, run:
        esac
 }
 
-setup_reflog_action () {
-       comment_for_reflog start
-
-       if test ! -z "$switch_to"
-       then
-               GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $switch_to"
-               output git checkout "$switch_to" -- ||
-                       die "$(eval_gettext "Could not checkout \$switch_to")"
-
-               comment_for_reflog start
-       fi
-}
-
 init_basic_state () {
        orig_head=$(git rev-parse --verify HEAD) || die "$(gettext "No HEAD?")"
        mkdir -p "$state_dir" || die "$(eval_gettext "Could not create temporary \$state_dir")"
@@ -220,17 +142,7 @@ $comment_char $(eval_ngettext \
        "Rebase \$shortrevisions onto \$shortonto (\$todocount commands)" \
        "$todocount")
 EOF
-       append_todo_help
-       gettext "
-       However, if you remove everything, the rebase will be aborted.
-
-       " | git stripspace --comment-lines >>"$todo"
-
-       if test -z "$keep_empty"
-       then
-               printf '%s\n' "$comment_char $(gettext "Note that empty commits are commented out")" >>"$todo"
-       fi
-
+       git rebase--helper --append-todo-help ${keep_empty:+--keep-empty}
 
        has_action "$todo" ||
                return 2
@@ -245,7 +157,8 @@ EOF
 
        git rebase--helper --check-todo-list || {
                ret=$?
-               checkout_onto
+               git rebase--helper --checkout-onto "$onto_name" "$onto" \
+                   "$orig_head" ${verbose:+--verbose}
                exit $ret
        }
 
@@ -255,7 +168,8 @@ EOF
        onto="$(git rebase--helper --skip-unnecessary-picks)" ||
        die "Could not skip unnecessary pick commands"
 
-       checkout_onto
+       git rebase--helper --checkout-onto "$onto_name" "$onto" "$orig_head" \
+           ${verbose:+--verbose}
        require_clean_work_tree "rebase"
        exec git rebase--helper ${force_rebase:+--no-ff} $allow_empty_message \
             --continue
@@ -268,7 +182,7 @@ git_rebase__interactive () {
                return 0
        fi
 
-       setup_reflog_action
+       git rebase--helper --prepare-branch "$switch_to" ${verbose:+--verbose}
        init_basic_state
 
        init_revisions_and_shortrevisions