#!zsh
#
# Installation
# ------------
#
# To achieve git-flow completion nirvana:
#
#  0. Update your zsh's git-completion module to the newest verion.
#     From here. http://zsh.git.sourceforge.net/git/gitweb.cgi?p=zsh/zsh;a=blob_plain;f=Completion/Unix/Command/_git;hb=HEAD
#
#  1. Install this file. Either:
#
#     a. Place it in your .zshrc:
#
#     b. Or, copy it somewhere (e.g. ~/.git-flow-completion.zsh) and put the following line in
#        your .zshrc:
#
#            source ~/.git-flow-completion.zsh
#
#     c. Or, use this file as a oh-my-zsh plugin.
#
 
_git-flow ()
{
    local curcontext="$curcontext" state line
    typeset -A opt_args
 
    _arguments -C \
        ':command:->command' \
        '*::options:->options'
 
    case $state in
        (command)
 
            local -a subcommands
            subcommands=(
                'init:Initialize a new git repo with support for the branching model.'
                'feature:Manage your feature branches.'
                'release:Manage your release branches.'
                'hotfix:Manage your hotfix branches.'
                'support:Manage your support branches.'
                'version:Shows version information.'
            )
            _describe -t commands 'git flow' subcommands
        ;;
 
        (options)
            case $line[1] in
 
                (init)
                    _arguments \
                        -f'[Force setting of gitflow branches, even if already configured]'
                    ;;
 
                    (version)
                    ;;
 
                    (hotfix)
                        __git-flow-hotfix
                    ;;
 
                    (release)
                        __git-flow-release
                    ;;
 
                    (feature)
                        __git-flow-feature
                    ;;
            esac
        ;;
    esac
}
 
__git-flow-release ()
{
    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 release branch.'
                'finish:Finish a release branch.'
                'list:List all your release branches. (Alias to `git flow release`)'
            )
            _describe -t commands 'git flow release' subcommands
            _arguments \
                -v'[Verbose (more) output]'
        ;;
 
        (options)
            case $line[1] in
 
                (start)
                    _arguments \
                        -F'[Fetch from origin before performing finish]'\
                        ':version:__git_flow_version_list'