#!bash # # git-flow-completion # =================== # # Bash completion support for [git-flow](http://github.com/nvie/gitflow) # # The contained completion routines provide support for completing: # # * git-flow init and version # * feature, hotfix and release branches # * remote feature branch names (for `git-flow feature track`) # # # Installation # ------------ # # To achieve git-flow completion nirvana: # # 0. Install git-completion. # # 1. Install this file. Either: # # a. Place it in a `bash-completion.d` folder: # # * /etc/bash-completion.d # * /usr/local/etc/bash-completion.d # * ~/bash-completion.d # # b. Or, copy it somewhere (e.g. ~/.git-flow-completion.sh) and put the following line in # your .bashrc: # # source ~/.git-flow-completion.sh # # 2. If you are using Git < 1.7.1: Edit git-completion.sh and add the following line to the giant # $command case in _git: # # flow) _git_flow ;; # # # The Fine Print # -------------- # # Copyright (c) 2010 [Justin Hileman](http://justinhileman.com) # # Distributed under the [MIT License](http://creativecommons.org/licenses/MIT/) _git_flow () { local subcommands="init feature release hotfix" local subcommand="$(__git_find_subcommand "$subcommands")" if [ -z "$subcommand" ]; then __gitcomp "$subcommands" return fi case "$subcommand" in feature) __git_flow_feature return ;; release) __git_flow_release return ;; hotfix) __git_flow_hotfix return ;; *) COMPREPLY=() ;; esac } __git_flow_feature () { local subcommands="list start finish publish track diff rebase checkout pull" local subcommand="$(__git_find_subcommand "$subcommands")" if [ -z "$subcommand" ]; then __gitcomp "$subcommands" return fi case "$subcommand" in pull) __gitcomp "$(__git_remotes)" return ;; checkout|finish|diff|rebase) __gitcomp "$(__git_flow_list_features)" return ;; publish) __gitcomp "$(comm -23 <(__git_flow_list_features) <(__git_flow_list_remote_features))" return ;; track) __gitcomp "$(__git_flow_list_remote_features)" return ;; *) COMPREPLY=() ;; esac } __git_flow_list_features () { git flow feature list 2> /dev/null | tr -d ' |*' } __git_flow_list_remote_features () { git branch -r 2> /dev/null | grep "origin/$(__git_flow_feature_prefix)" | awk '{ sub(/^origin\/$(__git_flow_feature_prefix)/, "", $1); print }' } __git_flow_feature_prefix () { git config gitflow.prefix.feature 2> /dev/null || echo "feature/" } __git_flow_release () { local subcommands="list start finish" local subcommand="$(__git_find_subcommand "$subcommands")" if [ -z "$subcommand" ]; then __gitcomp "$subcommands" return fi case "$subcommand" in finish) __gitcomp "$(__git_flow_list_releases)" return ;; *) COMPREPLY=() ;; esac } __git_flow_list_releases () { git flow release list 2> /dev/null } __git_flow_hotfix () { local subcommands="list start finish" local subcommand="$(__git_find_subcommand "$subcommands")" if [ -z "$subcommand" ]; then __gitcomp "$subcommands" return fi case "$subcommand" in finish) __gitcomp "$(__git_flow_list_hotfixes)" return ;; *) COMPREPLY=() ;; esac } __git_flow_list_hotfixes () { git flow hotfix list 2> /dev/null } # temporarily wrap __git_find_on_cmdline() for backwards compatibility if [ -z "`type -t __git_find_subcommand`" ]; then alias __git_find_subcommand=__git_find_on_cmdline fi