e87d708a4db8a56819a9a9d17144898c31b6aeb8
   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        test -n "$keep_empty" && keep_empty="--keep-empty"
  62        test -n "$rebase_merges" && rebase_merges="--rebase-merges"
  63        test -n "$rebase_cousins" && rebase_cousins="--rebase-cousins"
  64        test -n "$autosquash" && autosquash="--autosquash"
  65        test -n "$verbose" && verbose="--verbose"
  66        test -n "$force_rebase" && force_rebase="--no-ff"
  67        test -n "$restrict_revisions" && restrict_revisions="--restrict-revisions=^$restrict_revisions"
  68        test -n "$upstream" && upstream="--upstream=$upstream"
  69        test -n "$onto" && onto="--onto=$onto"
  70        test -n "$squash_onto" && squash_onto="--squash-onto=$squash_onto"
  71        test -n "$onto_name" && onto_name="--onto-name=$onto_name"
  72        test -n "$head_name" && head_name="--head-name=$head_name"
  73        test -n "$strategy" && strategy="--strategy=$strategy"
  74        test -n "$strategy_opts" && strategy_opts="--strategy-opts=$strategy_opts"
  75        test -n "$switch_to" && switch_to="--switch-to=$switch_to"
  76        test -n "$cmd" && cmd="--cmd=$cmd"
  77
  78        exec git rebase--interactive2 "$keep_empty" "$rebase_merges" "$rebase_cousins" \
  79                "$upstream" "$onto" "$squash_onto" "$restrict_revision" \
  80                "$allow_empty_message" "$autosquash" "$verbose" \
  81                "$force_rebase" "$onto_name" "$head_name" "$strategy" \
  82                "$strategy_opts" "$cmd" "$switch_to" \
  83                "$allow_rerere_autoupdate" "$gpg_sign_opt" "$signoff"
  84}