| __git_imerge_branches () { |
| git for-each-ref --format='%(refname)' refs/heads/ refs/remotes/ 2>/dev/null | |
| sed -e 's!^refs/heads/!!' -e 's!^refs/remotes/!!' |
| } |
| |
| __git_imerge_names () { |
| git for-each-ref --format='%(refname)' refs/imerge/ 2>/dev/null | |
| sed -e 's/^refs\/imerge\/\(.*\)\/.*/\1/' -e '/manual/d' -e '/auto/d' |
| } |
| |
| __git_imerge_goals="\ |
| merge |
| rebase |
| rebase-with-history |
| full |
| " |
| |
| __git_imerge_commands="\ |
| start |
| merge |
| rebase |
| continue |
| finish |
| diagram |
| list |
| init |
| record |
| autofill |
| simplify |
| remove |
| reparent |
| " |
| |
| __git_imerge_start_options="\ |
| --help |
| --manual |
| --name |
| --branch |
| --goal |
| --first-parent |
| " |
| |
| __git_imerge_init_options=$__git_imerge_start_options |
| |
| __git_imerge_continue_options="\ |
| --help |
| --name |
| --edit |
| --no-edit |
| " |
| |
| __git_imerge_finish_options="\ |
| --help |
| --name |
| --goal |
| --branch |
| --force |
| " |
| |
| __git_imerge_simplify_options=$__git_imerge_finish_options |
| |
| __git_imerge_merge_options="\ |
| --help |
| --name |
| --goal |
| --branch |
| --manual |
| " |
| |
| __git_imerge_list_options="\ |
| --help |
| " |
| |
| __git_imerge_reparent_options=$__git_imerge_list_options |
| |
| __git_imerge_record_options="\ |
| --help |
| --name |
| --edit |
| --no-edit |
| " |
| |
| __git_imerge_autofill_options="\ |
| --help |
| --name |
| " |
| |
| __git_imerge_diagram_options="\ |
| --help |
| --name |
| --commits |
| --frontier |
| --html |
| --color |
| --no-color |
| " |
| |
| __git_imerge_remove_options=$__git_imerge_autofill_options |
| |
| __git_imerge_rebase_options=$__git_imerge_merge_options |
| |
| __git-imerge_start_completion() { |
| case "$1_$cur" in |
| --help_|--branch_|_--branch=|--name_|_--name=) |
| return |
| ;; |
| --goal_*|*_--goal=*) |
| __gitcomp "$__git_imerge_goals" "" "${cur##--goal=}" |
| return |
| ;; |
| *-|*_-*?) |
| __gitcomp "$__git_imerge_start_options" |
| return |
| ;; |
| esac |
| __gitcomp "$(__git_imerge_branches)" |
| } |
| |
| __git-imerge_init_completion() { |
| __git-imerge_start_completion $1 |
| } |
| |
| __git-imerge_continue_completion() { |
| case "$1_$cur" in |
| --help_) |
| return |
| ;; |
| --name_*|*_--name=*) |
| __gitcomp "$(__git_imerge_names)" "" "${cur##--name=}" |
| return |
| ;; |
| esac |
| __gitcomp "$__git_imerge_continue_options" |
| } |
| |
| __git-imerge_finish_completion() { |
| case "$1_$cur" in |
| --help_) |
| return |
| ;; |
| --goal_*|*_--goal=*) |
| __gitcomp "$__git_imerge_goals" "" "${cur##--goal=}" |
| return |
| ;; |
| --branch_*|*_--branch=*) |
| __gitcomp "$(__git_imerge_branches)" "" "${cur##--branch=}" |
| return |
| ;; |
| --name_*|*_--name=*) |
| __gitcomp "$(__git_imerge_names)" "" "${cur##--name=}" |
| return |
| ;; |
| esac |
| __gitcomp "$__git_imerge_finish_options" |
| } |
| |
| __git-imerge_simplify_completion() { |
| __git-imerge_finish_completion $1 |
| } |
| |
| __git-imerge_merge_completion() { |
| case "$1_$cur" in |
| --help_|--branch_|_--branch=|--name_|_--name=) |
| return |
| ;; |
| --goal_*|*_--goal=*) |
| __gitcomp "$__git_imerge_goals" "" "${cur##--goal=}" |
| return |
| ;; |
| *-|*_-*?) |
| __gitcomp "$__git_imerge_merge_options" |
| return |
| ;; |
| esac |
| __gitcomp "$(__git_imerge_branches)" |
| } |
| |
| __git-imerge_rebase_completion() { |
| __git-imerge_merge_completion $1 |
| } |
| |
| __git-imerge_list_completion() { |
| case "$1" in |
| --help) |
| return |
| ;; |
| esac |
| __gitcomp "$__git_imerge_list_options" |
| } |
| |
| __git-imerge_reparent_completion() { |
| __git-imerge_list_completion $1 |
| } |
| |
| __git-imerge_record_completion() { |
| case "$1_$cur" in |
| --help_) |
| return |
| ;; |
| --name_*|*_--name=*) |
| __gitcomp "$(__git_imerge_names)" "" "${cur##--name=}" |
| return |
| ;; |
| esac |
| __gitcomp "$__git_imerge_record_options" |
| } |
| |
| __git-imerge_autofill_completion() { |
| case "$1_$cur" in |
| --help_) |
| return |
| ;; |
| --name_*|*_--name=*) |
| __gitcomp "$(__git_imerge_names)" "" "${cur##--name=}" |
| return |
| ;; |
| esac |
| __gitcomp "$__git_imerge_autofill_options" |
| } |
| |
| __git-imerge_remove_completion() { |
| __git-imerge_autofill_completion $1 |
| } |
| |
| __git-imerge_diagram_completion() { |
| case "$1_$cur" in |
| --help_|--html_|_--html=) |
| return |
| ;; |
| --name_*|*_--name=*) |
| __gitcomp "$(__git_imerge_names)" "" "${cur##--name=}" |
| return |
| ;; |
| esac |
| __gitcomp "$__git_imerge_diagram_options" |
| } |
| |
| _git_imerge () { |
| # Disable default filename completion. Note that "compopt" is only |
| # available in Bash 4 and newer, so we check for existence before |
| # trying to use it. |
| type compopt >/dev/null 2>&1 && compopt +o default +o bashdefault |
| |
| local i command cur_opt |
| for ((i=0; i <= ${cword}; i++)); do |
| if [ -n "$command" ] && [ "${words[i]}" != "$cur" ]; then |
| cur_opt="${words[i]}" |
| fi |
| if [ -z "$command" ] && \ |
| [ "$i" -lt "${cword}" ] && \ |
| [[ "${words[i-1]}" == *"imerge"* ]] |
| then |
| command="${words[i]}" |
| fi |
| done |
| |
| if test -z "$command"; then |
| __gitcomp "$__git_imerge_commands" |
| return |
| fi |
| |
| if [ -z `type -t __git-imerge_"$command"_completion "$cur_opt"` ]; then |
| return |
| fi |
| |
| __git-imerge_"$command"_completion "$cur_opt" |
| } |