Update git-flow-avh to 0.6.0 (#6498)

This updates the git-flow-avh plugin to the latest version
from https://github.com/petervanderdoes/git-flow-completion
(0.6.0 at the time of this commit).

This mainly adds support for the "git flow bugfix" command.

This PR replaces #4626 as well as #4705, both of which adds support for the bugfix command but doesn't use the official version from https://github.com/petervanderdoes/git-flow-completion

Fixes #4705
Fixes #4626
Fixes #5903
This commit is contained in:
Johan Kaving 2018-07-19 16:53:19 +02:00 committed by Marc Cornellà
parent a3ab45db8b
commit 626b30b2a3

723
plugins/git-flow-avh/git-flow-avh.plugin.zsh Normal file → Executable file
View File

@ -22,398 +22,527 @@
_git-flow () _git-flow ()
{ {
local curcontext="$curcontext" state line local curcontext="$curcontext" state line
typeset -A opt_args typeset -A opt_args
_arguments -C \ _arguments -C \
':command:->command' \ ':command:->command' \
'*::options:->options' '*::options:->options'
case $state in case $state in
(command) (command)
local -a subcommands local -a subcommands
subcommands=( subcommands=(
'init:Initialize a new git repo with support for the branching model.' 'init:Initialize a new git repo with support for the branching model.'
'feature:Manage your feature branches.' 'feature:Manage your feature branches.'
'config:Manage your configuration.' 'bugfix:Manage your bugfix branches.'
'release:Manage your release branches.' 'config:Manage your configuration.'
'hotfix:Manage your hotfix branches.' 'release:Manage your release branches.'
'support:Manage your support branches.' 'hotfix:Manage your hotfix branches.'
'version:Shows version information.' 'support:Manage your support branches.'
'finish:Finish the branch you are currently on.' 'version:Shows version information.'
'delete:Delete the branch you are currently on.' 'finish:Finish the branch you are currently on.'
'publish:Publish the branch you are currently on.' 'delete:Delete the branch you are currently on.'
) 'publish:Publish the branch you are currently on.'
_describe -t commands 'git flow' subcommands 'rebase:Rebase the branch you are currently on.'
;; )
_describe -t commands 'git flow' subcommands
;;
(options) (options)
case $line[1] in case $line[1] in
(init) (init)
_arguments \ _arguments \
-f'[Force setting of gitflow branches, even if already configured]' -f'[Force setting of gitflow branches, even if already configured]'
;; ;;
(version) (version)
;; ;;
(hotfix) (hotfix)
__git-flow-hotfix __git-flow-hotfix
;; ;;
(release) (release)
__git-flow-release __git-flow-release
;; ;;
(feature) (feature)
__git-flow-feature __git-flow-feature
;; ;;
(config) (bugfix)
__git-flow-config __git-flow-bugfix
;; ;;
esac (config)
;; __git-flow-config
esac ;;
esac
;;
esac
} }
__git-flow-release () __git-flow-release ()
{ {
local curcontext="$curcontext" state line local curcontext="$curcontext" state line
typeset -A opt_args typeset -A opt_args
_arguments -C \ _arguments -C \
':command:->command' \ ':command:->command' \
'*::options:->options' '*::options:->options'
case $state in case $state in
(command) (command)
local -a subcommands local -a subcommands
subcommands=( subcommands=(
'start:Start a new release branch.' 'start:Start a new release branch.'
'finish:Finish a release branch.' 'finish:Finish a release branch.'
'list:List all your release branches. (Alias to `git flow release`)' 'list:List all your release branches. (Alias to `git flow release`)'
'publish:Publish release branch to remote.' 'publish:Publish release branch to remote.'
'track:Checkout remote release branch.' 'track:Checkout remote release branch.'
'delete:Delete a release branch.' 'rebase:Rebase from integration branch.'
) 'delete:Delete a release branch.'
_describe -t commands 'git flow release' subcommands )
_arguments \ _describe -t commands 'git flow release' subcommands
-v'[Verbose (more) output]' _arguments \
;; -v'[Verbose (more) output]'
;;
(options) (options)
case $line[1] in case $line[1] in
(start) (start)
_arguments \ _arguments \
-F'[Fetch from origin before performing finish]'\ -F'[Fetch from origin before performing finish]'\
':version:__git_flow_version_list' ':version:__git_flow_version_list'
;; ;;
(finish) (finish)
_arguments \ _arguments \
-F'[Fetch from origin before performing finish]' \ -F'[Fetch from origin before performing finish]' \
-s'[Sign the release tag cryptographically]'\ -s'[Sign the release tag cryptographically]'\
-u'[Use the given GPG-key for the digital signature (implies -s)]'\ -u'[Use the given GPG-key for the digital signature (implies -s)]'\
-m'[Use the given tag message]'\ -m'[Use the given tag message]'\
-p'[Push to $ORIGIN after performing finish]'\ -p'[Push to $ORIGIN after performing finish]'\
':version:__git_flow_version_list' ':version:__git_flow_version_list'
;; ;;
(delete) (delete)
_arguments \ _arguments \
-f'[Force deletion]' \ -f'[Force deletion]' \
-r'[Delete remote branch]' \ -r'[Delete remote branch]' \
':version:__git_flow_version_list' ':version:__git_flow_version_list'
;; ;;
(publish) (publish)
_arguments \ _arguments \
':version:__git_flow_version_list' ':version:__git_flow_version_list'
;; ;;
(track) (track)
_arguments \ _arguments \
':version:__git_flow_version_list' ':version:__git_flow_version_list'
;; ;;
*) (rebase)
_arguments \ _arguments \
-v'[Verbose (more) output]' -i'[Do an interactive rebase]' \
;; ':branch:__git_branch_names'
esac ;;
;;
esac *)
_arguments \
-v'[Verbose (more) output]'
;;
esac
;;
esac
} }
__git-flow-hotfix () __git-flow-hotfix ()
{ {
local curcontext="$curcontext" state line local curcontext="$curcontext" state line
typeset -A opt_args typeset -A opt_args
_arguments -C \ _arguments -C \
':command:->command' \ ':command:->command' \
'*::options:->options' '*::options:->options'
case $state in case $state in
(command) (command)
local -a subcommands local -a subcommands
subcommands=( subcommands=(
'start:Start a new hotfix branch.' 'start:Start a new hotfix branch.'
'finish:Finish a hotfix branch.' 'finish:Finish a hotfix branch.'
'delete:Delete a hotfix branch.' 'delete:Delete a hotfix branch.'
'list:List all your hotfix branches. (Alias to `git flow hotfix`)' 'rebase:Rebase from integration branch.'
) 'list:List all your hotfix branches. (Alias to `git flow hotfix`)'
_describe -t commands 'git flow hotfix' subcommands 'rename:Rename a hotfix branch.'
_arguments \ )
-v'[Verbose (more) output]' _describe -t commands 'git flow hotfix' subcommands
;; _arguments \
-v'[Verbose (more) output]'
;;
(options) (options)
case $line[1] in case $line[1] in
(start) (start)
_arguments \ _arguments \
-F'[Fetch from origin before performing finish]'\ -F'[Fetch from origin before performing finish]'\
':hotfix:__git_flow_version_list'\ ':hotfix:__git_flow_version_list'\
':branch-name:__git_branch_names' ':branch-name:__git_branch_names'
;; ;;
(finish) (finish)
_arguments \ _arguments \
-F'[Fetch from origin before performing finish]' \ -F'[Fetch from origin before performing finish]' \
-s'[Sign the release tag cryptographically]'\ -s'[Sign the release tag cryptographically]'\
-u'[Use the given GPG-key for the digital signature (implies -s)]'\ -u'[Use the given GPG-key for the digital signature (implies -s)]'\
-m'[Use the given tag message]'\ -m'[Use the given tag message]'\
-p'[Push to $ORIGIN after performing finish]'\ -p'[Push to $ORIGIN after performing finish]'\
':hotfix:__git_flow_hotfix_list' ':hotfix:__git_flow_hotfix_list'
;; ;;
(delete) (delete)
_arguments \ _arguments \
-f'[Force deletion]' \ -f'[Force deletion]' \
-r'[Delete remote branch]' \ -r'[Delete remote branch]' \
':hotfix:__git_flow_hotfix_list' ':hotfix:__git_flow_hotfix_list'
;; ;;
*) (rebase)
_arguments \ _arguments \
-v'[Verbose (more) output]' -i'[Do an interactive rebase]' \
;; ':branch:__git_branch_names'
esac ;;
;;
esac *)
_arguments \
-v'[Verbose (more) output]'
;;
esac
;;
esac
} }
__git-flow-feature () __git-flow-feature ()
{ {
local curcontext="$curcontext" state line local curcontext="$curcontext" state line
typeset -A opt_args typeset -A opt_args
_arguments -C \ _arguments -C \
':command:->command' \ ':command:->command' \
'*::options:->options' '*::options:->options'
case $state in case $state in
(command) (command)
local -a subcommands local -a subcommands
subcommands=( subcommands=(
'start:Start a new feature branch.' 'start:Start a new feature branch.'
'finish:Finish a feature branch.' 'finish:Finish a feature branch.'
'delete:Delete a feature branch.' 'delete:Delete a feature branch.'
'list:List all your feature branches. (Alias to `git flow feature`)' 'list:List all your feature branches. (Alias to `git flow feature`)'
'publish:Publish feature branch to remote.' 'publish:Publish feature branch to remote.'
'track:Checkout remote feature branch.' 'track:Checkout remote feature branch.'
'diff:Show all changes.' 'diff:Show all changes.'
'rebase:Rebase from integration branch.' 'rebase:Rebase from integration branch.'
'checkout:Checkout local feature branch.' 'checkout:Checkout local feature branch.'
'pull:Pull changes from remote.' 'pull:Pull changes from remote.'
) 'rename:Rename a feature branch.'
_describe -t commands 'git flow feature' subcommands )
_arguments \ _describe -t commands 'git flow feature' subcommands
-v'[Verbose (more) output]' _arguments \
;; -v'[Verbose (more) output]'
;;
(options) (options)
case $line[1] in case $line[1] in
(start) (start)
_arguments \ _arguments \
-F'[Fetch from origin before performing finish]'\ -F'[Fetch from origin before performing finish]'\
':feature:__git_flow_feature_list'\ ':feature:__git_flow_feature_list'\
':branch-name:__git_branch_names' ':branch-name:__git_branch_names'
;; ;;
(finish) (finish)
_arguments \ _arguments \
-F'[Fetch from origin before performing finish]' \ -F'[Fetch from origin before performing finish]' \
-r'[Rebase instead of merge]'\ -r'[Rebase instead of merge]'\
':feature:__git_flow_feature_list' ':feature:__git_flow_feature_list'
;; ;;
(delete) (delete)
_arguments \ _arguments \
-f'[Force deletion]' \ -f'[Force deletion]' \
-r'[Delete remote branch]' \ -r'[Delete remote branch]' \
':feature:__git_flow_feature_list' ':feature:__git_flow_feature_list'
;; ;;
(publish) (publish)
_arguments \ _arguments \
':feature:__git_flow_feature_list'\ ':feature:__git_flow_feature_list'\
;; ;;
(track) (track)
_arguments \ _arguments \
':feature:__git_flow_feature_list'\ ':feature:__git_flow_feature_list'\
;; ;;
(diff) (diff)
_arguments \ _arguments \
':branch:__git_branch_names'\ ':branch:__git_branch_names'\
;; ;;
(rebase) (rebase)
_arguments \ _arguments \
-i'[Do an interactive rebase]' \ -i'[Do an interactive rebase]' \
':branch:__git_branch_names' ':branch:__git_branch_names'
;; ;;
(checkout) (checkout)
_arguments \ _arguments \
':branch:__git_flow_feature_list'\ ':branch:__git_flow_feature_list'\
;; ;;
(pull) (pull)
_arguments \ _arguments \
':remote:__git_remotes'\ ':remote:__git_remotes'\
':branch:__git_branch_names' ':branch:__git_branch_names'
;; ;;
*) *)
_arguments \ _arguments \
-v'[Verbose (more) output]' -v'[Verbose (more) output]'
;; ;;
esac esac
;; ;;
esac esac
}
__git-flow-bugfix ()
{
local curcontext="$curcontext" state line
typeset -A opt_args
_arguments -C \
':command:->command' \
'*::options:->options'
case $state in
(command)
local -a subcommands
subcommands=(
'start:Start a new bugfix branch.'
'finish:Finish a bugfix branch.'
'delete:Delete a bugfix branch.'
'list:List all your bugfix branches. (Alias to `git flow bugfix`)'
'publish:Publish bugfix branch to remote.'
'track:Checkout remote bugfix branch.'
'diff:Show all changes.'
'rebase:Rebase from integration branch.'
'checkout:Checkout local bugfix branch.'
'pull:Pull changes from remote.'
'rename:Rename a bugfix branch.'
)
_describe -t commands 'git flow bugfix' subcommands
_arguments \
-v'[Verbose (more) output]'
;;
(options)
case $line[1] in
(start)
_arguments \
-F'[Fetch from origin before performing finish]'\
':bugfix:__git_flow_bugfix_list'\
':branch-name:__git_branch_names'
;;
(finish)
_arguments \
-F'[Fetch from origin before performing finish]' \
-r'[Rebase instead of merge]'\
':bugfix:__git_flow_bugfix_list'
;;
(delete)
_arguments \
-f'[Force deletion]' \
-r'[Delete remote branch]' \
':bugfix:__git_flow_bugfix_list'
;;
(publish)
_arguments \
':bugfix:__git_flow_bugfix_list'\
;;
(track)
_arguments \
':bugfix:__git_flow_bugfix_list'\
;;
(diff)
_arguments \
':branch:__git_branch_names'\
;;
(rebase)
_arguments \
-i'[Do an interactive rebase]' \
':branch:__git_branch_names'
;;
(checkout)
_arguments \
':branch:__git_flow_bugfix_list'\
;;
(pull)
_arguments \
':remote:__git_remotes'\
':branch:__git_branch_names'
;;
*)
_arguments \
-v'[Verbose (more) output]'
;;
esac
;;
esac
} }
__git-flow-config () __git-flow-config ()
{ {
local curcontext="$curcontext" state line local curcontext="$curcontext" state line
typeset -A opt_args typeset -A opt_args
_arguments -C \ _arguments -C \
':command:->command' \ ':command:->command' \
'*::options:->options' '*::options:->options'
case $state in case $state in
(command) (command)
local -a subcommands local -a subcommands
subcommands=( subcommands=(
'list:List the configuration. (Alias to `git flow config`)' 'list:List the configuration. (Alias to `git flow config`)'
'set:Set the configuration option' 'set:Set the configuration option'
) )
_describe -t commands 'git flow config' subcommands _describe -t commands 'git flow config' subcommands
;; ;;
(options) (options)
case $line[1] in case $line[1] in
(set) (set)
_arguments \ _arguments \
--local'[Use repository config file]' \ --local'[Use repository config file]' \
--global'[Use global config file]'\ --global'[Use global config file]'\
--system'[Use system config file]'\ --system'[Use system config file]'\
--file'[Use given config file]'\ --file'[Use given config file]'\
':option:(master develop feature hotfix release support versiontagprefix)' ':option:(master develop feature hotfix release support versiontagprefix)'
;; ;;
*) *)
_arguments \ _arguments \
--local'[Use repository config file]' \ --local'[Use repository config file]' \
--global'[Use global config file]'\ --global'[Use global config file]'\
--system'[Use system config file]'\ --system'[Use system config file]'\
--file'[Use given config file]' --file'[Use given config file]'
;; ;;
esac esac
;; ;;
esac esac
} }
__git_flow_version_list () __git_flow_version_list ()
{ {
local expl local expl
declare -a versions declare -a versions
versions=(${${(f)"$(_call_program versions git flow release list 2> /dev/null | tr -d ' |*')"}}) versions=(${${(f)"$(_call_program versions git flow release list 2> /dev/null | tr -d ' |*')"}})
__git_command_successful || return __git_command_successful || return
_wanted versions expl 'version' compadd $versions _wanted versions expl 'version' compadd $versions
} }
__git_flow_feature_list () __git_flow_feature_list ()
{ {
local expl local expl
declare -a features declare -a features
features=(${${(f)"$(_call_program features git flow feature list 2> /dev/null | tr -d ' |*')"}}) features=(${${(f)"$(_call_program features git flow feature list 2> /dev/null | tr -d ' |*')"}})
__git_command_successful || return __git_command_successful || return
_wanted features expl 'feature' compadd $features _wanted features expl 'feature' compadd $features
}
__git_flow_bugfix_list ()
{
local expl
declare -a bugfixes
bugfixes=(${${(f)"$(_call_program bugfixes git flow bugfix list 2> /dev/null | tr -d ' |*')"}})
__git_command_successful || return
_wanted bugfixes expl 'bugfix' compadd $bugfixes
} }
__git_remotes () { __git_remotes () {
local expl gitdir remotes local expl gitdir remotes
gitdir=$(_call_program gitdir git rev-parse --git-dir 2>/dev/null) gitdir=$(_call_program gitdir git rev-parse --git-dir 2>/dev/null)
__git_command_successful || return __git_command_successful || return
remotes=(${${(f)"$(_call_program remotes git config --get-regexp '"^remote\..*\.url$"')"}//#(#b)remote.(*).url */$match[1]}) remotes=(${${(f)"$(_call_program remotes git config --get-regexp '"^remote\..*\.url$"')"}//#(#b)remote.(*).url */$match[1]})
__git_command_successful || return __git_command_successful || return
# TODO: Should combine the two instead of either or. # TODO: Should combine the two instead of either or.
if (( $#remotes > 0 )); then if (( $#remotes > 0 )); then
_wanted remotes expl remote compadd $* - $remotes _wanted remotes expl remote compadd $* - $remotes
else else
_wanted remotes expl remote _files $* - -W "($gitdir/remotes)" -g "$gitdir/remotes/*" _wanted remotes expl remote _files $* - -W "($gitdir/remotes)" -g "$gitdir/remotes/*"
fi fi
} }
__git_flow_hotfix_list () __git_flow_hotfix_list ()
{ {
local expl local expl
declare -a hotfixes declare -a hotfixes
hotfixes=(${${(f)"$(_call_program hotfixes git flow hotfix list 2> /dev/null | tr -d ' |*')"}}) hotfixes=(${${(f)"$(_call_program hotfixes git flow hotfix list 2> /dev/null | tr -d ' |*')"}})
__git_command_successful || return __git_command_successful || return
_wanted hotfixes expl 'hotfix' compadd $hotfixes _wanted hotfixes expl 'hotfix' compadd $hotfixes
} }
__git_branch_names () { __git_branch_names () {
local expl local expl
declare -a branch_names declare -a branch_names
branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads 2>/dev/null)"}#refs/heads/}) branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads 2>/dev/null)"}#refs/heads/})
__git_command_successful || return __git_command_successful || return
_wanted branch-names expl branch-name compadd $* - $branch_names _wanted branch-names expl branch-name compadd $* - $branch_names
} }
__git_command_successful () { __git_command_successful () {
if (( ${#pipestatus:#0} > 0 )); then if (( ${#pipestatus:#0} > 0 )); then
_message 'not a git repository' _message 'not a git repository'
return 1 return 1
fi fi
return 0 return 0
} }
zstyle ':completion:*:*:git:*' user-commands flow:'provide high-level repository operations' zstyle ':completion:*:*:git:*' user-commands flow:'provide high-level repository operations'