git-rebase--interactive.shon commit rebase -i: rewrite init_basic_state() in C (d59cd14)
   1# This shell script fragment is sourced by git-rebase to implement
   2# its interactive mode.  "git rebase --interactive" makes it easy
   3# to fix up commits in the middle of a series and rearrange commits.
   4#
   5# Copyright (c) 2006 Johannes E. Schindelin
   6#
   7# The original idea comes from Eric W. Biederman, in
   8# https://public-inbox.org/git/m1odwkyuf5.fsf_-_@ebiederm.dsl.xmission.com/
   9#
  10# The file containing rebase commands, comments, and empty lines.
  11# This file is created by "git rebase -i" then edited by the user.  As
  12# the lines are processed, they are removed from the front of this
  13# file and written to the tail of $done.
  14todo="$state_dir"/git-rebase-todo
  15
  16GIT_CHERRY_PICK_HELP="$resolvemsg"
  17export GIT_CHERRY_PICK_HELP
  18
  19# Initiate an action. If the cannot be any
  20# further action it  may exec a command
  21# or exit and not return.
  22#
  23# TODO: Consider a cleaner return model so it
  24# never exits and always return 0 if process
  25# is complete.
  26#
  27# Parameter 1 is the action to initiate.
  28#
  29# Returns 0 if the action was able to complete
  30# and if 1 if further processing is required.
  31initiate_action () {
  32        case "$1" in
  33        continue)
  34                exec git rebase--helper ${force_rebase:+--no-ff} $allow_empty_message \
  35                     --continue
  36                ;;
  37        skip)
  38                git rerere clear
  39                exec git rebase--helper ${force_rebase:+--no-ff} $allow_empty_message \
  40                     --continue
  41                ;;
  42        edit-todo)
  43                exec git rebase--helper --edit-todo
  44                ;;
  45        show-current-patch)
  46                exec git show REBASE_HEAD --
  47                ;;
  48        *)
  49                return 1 # continue
  50                ;;
  51        esac
  52}
  53
  54git_rebase__interactive () {
  55        initiate_action "$action"
  56        ret=$?
  57        if test $ret = 0; then
  58                return 0
  59        fi
  60
  61        git rebase--helper --prepare-branch "$switch_to" ${verbose:+--verbose}
  62
  63        git rebase--helper --init-basic-state ${upstream:+--upstream "$upstream"} \
  64                ${onto:+--onto "$onto"} ${head_name:+--head-name "$head_name"} \
  65                ${verbose:+--verbose} ${strategy:+--strategy "$strategy"} \
  66                ${strategy_opts:+--strategy-opts="$strategy_opts"} \
  67                "$allow_rerere_autoupdate" "$gpg_sign_opt" "$signoff" || exit
  68
  69        git rebase--helper --make-script ${keep_empty:+--keep-empty} \
  70                ${rebase_merges:+--rebase-merges} \
  71                ${rebase_cousins:+--rebase-cousins} \
  72                ${upstream:+--upstream "$upstream"} ${onto:+--onto "$onto"} \
  73                ${squash_onto:+--squash-onto "$squash_onto"} \
  74                ${restrict_revision:+--restrict-revision ^"$restrict_revision"} >"$todo" ||
  75        die "$(gettext "Could not generate todo list")"
  76
  77        exec git rebase--helper --complete-action "$onto_name" "$cmd" \
  78                $allow_empty_message ${autosquash:+--autosquash} ${verbose:+--verbose} \
  79                ${keep_empty:+--keep-empty} ${force_rebase:+--no-ff} \
  80                ${upstream:+--upstream "$upstream"} ${onto:+--onto "$onto"}
  81}