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}