summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/git-flow/_git-flow327
-rw-r--r--plugins/git-flow/git-flow.plugin.zsh357
2 files changed, 334 insertions, 350 deletions
diff --git a/plugins/git-flow/_git-flow b/plugins/git-flow/_git-flow
new file mode 100644
index 000000000..eab712707
--- /dev/null
+++ b/plugins/git-flow/_git-flow
@@ -0,0 +1,327 @@
+#compdef git-flow
+
+_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`)'
+ 'publish: public'
+ 'track: track'
+ )
+ _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'
+ ;;
+
+ (finish)
+ _arguments \
+ -F'[Fetch from origin before performing finish]' \
+ -s'[Sign the release tag cryptographically]'\
+ -u'[Use the given GPG-key for the digital signature (implies -s)]'\
+ -m'[Use the given tag message]'\
+ -p'[Push to $ORIGIN after performing finish]'\
+ -k'[Keep branch after performing finish]'\
+ -n"[Don't tag this release]"\
+ ':version:__git_flow_version_list'
+ ;;
+
+ (publish)
+ _arguments \
+ ':version:__git_flow_version_list'\
+ ;;
+
+ (track)
+ _arguments \
+ ':version:__git_flow_version_list'\
+ ;;
+
+ *)
+ _arguments \
+ -v'[Verbose (more) output]'
+ ;;
+ esac
+ ;;
+ esac
+}
+
+__git-flow-hotfix () {
+ 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 hotfix branch.'
+ 'finish:Finish a hotfix branch.'
+ 'list:List all your hotfix branches. (Alias to `git flow hotfix`)'
+ )
+ _describe -t commands 'git flow hotfix' subcommands
+ _arguments \
+ -v'[Verbose (more) output]'
+ ;;
+
+ (options)
+ case $line[1] in
+
+ (start)
+ _arguments \
+ -F'[Fetch from origin before performing finish]'\
+ ':hotfix:__git_flow_version_list'\
+ ':branch-name:__git_branch_names'
+ ;;
+
+ (finish)
+ _arguments \
+ -F'[Fetch from origin before performing finish]' \
+ -s'[Sign the release tag cryptographically]'\
+ -u'[Use the given GPG-key for the digital signature (implies -s)]'\
+ -m'[Use the given tag message]'\
+ -p'[Push to $ORIGIN after performing finish]'\
+ -k'[Keep branch after performing finish]'\
+ -n"[Don't tag this release]"\
+ ':hotfix:__git_flow_hotfix_list'
+ ;;
+
+ *)
+ _arguments \
+ -v'[Verbose (more) output]'
+ ;;
+ esac
+ ;;
+ esac
+}
+
+__git-flow-feature () {
+ 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 feature branch.'
+ 'finish:Finish a feature branch.'
+ 'list:List all your feature branches. (Alias to `git flow feature`)'
+ 'publish: publish'
+ 'track: track'
+ 'diff: diff'
+ 'rebase: rebase'
+ 'checkout: checkout'
+ 'pull: pull'
+ )
+ _describe -t commands 'git flow feature' subcommands
+ _arguments \
+ -v'[Verbose (more) output]'
+ ;;
+
+ (options)
+ case $line[1] in
+
+ (start)
+ _arguments \
+ -F'[Fetch from origin before performing finish]'\
+ ':feature:__git_flow_feature_list'\
+ ':branch-name:__git_branch_names'
+ ;;
+
+ (finish)
+ _arguments \
+ -F'[Fetch from origin before performing finish]' \
+ -r'[Rebase instead of merge]'\
+ -k'[Keep branch after performing finish]'\
+ ':feature:__git_flow_feature_list'
+ ;;
+
+ (publish)
+ _arguments \
+ ':feature:__git_flow_feature_list'\
+ ;;
+
+ (track)
+ _arguments \
+ ':feature:__git_flow_feature_list'\
+ ;;
+
+ (diff)
+ _arguments \
+ ':branch:__git_flow_feature_list'\
+ ;;
+
+ (rebase)
+ _arguments \
+ -i'[Do an interactive rebase]' \
+ ':branch:__git_flow_feature_list'
+ ;;
+
+ (checkout)
+ _arguments \
+ ':branch:__git_flow_feature_list'\
+ ;;
+
+ (pull)
+ _arguments \
+ ':remote:__git_remotes'\
+ ':branch:__git_flow_feature_list'
+ ;;
+
+ *)
+ _arguments \
+ -v'[Verbose (more) output]'
+ ;;
+ esac
+ ;;
+ esac
+}
+
+__git_flow_version_list () {
+ local expl
+ declare -a versions
+
+ versions=(${${(f)"$(_call_program versions git flow release list 2> /dev/null | tr -d ' |*')"}})
+ __git_command_successful || return
+
+ _wanted versions expl 'version' compadd $versions
+}
+
+__git_flow_feature_list () {
+ local expl
+ declare -a features
+
+ features=(${${(f)"$(_call_program features git flow feature list 2> /dev/null | tr -d ' |*')"}})
+ __git_command_successful || return
+
+ _wanted features expl 'feature' compadd $features
+}
+
+__git_remotes () {
+ local expl gitdir remotes
+
+ gitdir=$(_call_program gitdir git rev-parse --git-dir 2>/dev/null)
+ __git_command_successful || return
+
+ remotes=(${${(f)"$(_call_program remotes git config --get-regexp '"^remote\..*\.url$"')"}//#(#b)remote.(*).url */$match[1]})
+ __git_command_successful || return
+
+ # TODO: Should combine the two instead of either or.
+ if (( $#remotes > 0 )); then
+ _wanted remotes expl remote compadd $* - $remotes
+ else
+ _wanted remotes expl remote _files $* - -W "($gitdir/remotes)" -g "$gitdir/remotes/*"
+ fi
+}
+
+__git_flow_hotfix_list () {
+ local expl
+ declare -a hotfixes
+
+ hotfixes=(${${(f)"$(_call_program hotfixes git flow hotfix list 2> /dev/null | tr -d ' |*')"}})
+ __git_command_successful || return
+
+ _wanted hotfixes expl 'hotfix' compadd $hotfixes
+}
+
+__git_branch_names () {
+ local expl
+ declare -a branch_names
+
+ branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads 2>/dev/null)"}#refs/heads/})
+ __git_command_successful || return
+
+ _wanted branch-names expl branch-name compadd $* - $branch_names
+}
+
+__git_command_successful () {
+ if (( ${#pipestatus:#0} > 0 )); then
+ _message 'not a git repository'
+ return 1
+ fi
+ return 0
+}
+
+zstyle ':completion:*:*:git:*' user-commands flow:'description for foo'
+
+# Detect if script is sourced or called via autoload
+[[ "$ZSH_EVAL_CONTEXT" != *:file ]] || return
+
+_git-flow "$@"
diff --git a/plugins/git-flow/git-flow.plugin.zsh b/plugins/git-flow/git-flow.plugin.zsh
index 041df3aa5..13399aaa3 100644
--- a/plugins/git-flow/git-flow.plugin.zsh
+++ b/plugins/git-flow/git-flow.plugin.zsh
@@ -1,26 +1,4 @@
-#!zsh
-#
-# Installation
-# ------------
-#
-# To achieve git-flow completion nirvana:
-#
-# 0. Update your zsh's git-completion module to the newest version.
-# From here. https://raw.githubusercontent.com/zsh-users/zsh/master/Completion/Unix/Command/_git
-#
-# 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 an oh-my-zsh plugin.
-#
-
-#Alias
+# Aliases
alias gfl='git flow'
alias gfli='git flow init'
alias gcd='git checkout $(git config gitflow.branch.develop)'
@@ -44,330 +22,9 @@ alias gflfpc='git flow feature publish $(echo $(current_branch) | cut -c 9-)'
alias gflrfc='git flow release finish $(echo $(current_branch) | cut -c 9-)'
alias gflrpc='git flow release publish $(echo $(current_branch) | cut -c 9-)'
-_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`)'
- 'publish: public'
- 'track: track'
- )
- _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'
- ;;
-
- (finish)
- _arguments \
- -F'[Fetch from origin before performing finish]' \
- -s'[Sign the release tag cryptographically]'\
- -u'[Use the given GPG-key for the digital signature (implies -s)]'\
- -m'[Use the given tag message]'\
- -p'[Push to $ORIGIN after performing finish]'\
- -k'[Keep branch after performing finish]'\
- -n"[Don't tag this release]"\
- ':version:__git_flow_version_list'
- ;;
-
- (publish)
- _arguments \
- ':version:__git_flow_version_list'\
- ;;
-
- (track)
- _arguments \
- ':version:__git_flow_version_list'\
- ;;
-
- *)
- _arguments \
- -v'[Verbose (more) output]'
- ;;
- esac
- ;;
- esac
-}
-
-__git-flow-hotfix ()
-{
- 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 hotfix branch.'
- 'finish:Finish a hotfix branch.'
- 'list:List all your hotfix branches. (Alias to `git flow hotfix`)'
- )
- _describe -t commands 'git flow hotfix' subcommands
- _arguments \
- -v'[Verbose (more) output]'
- ;;
-
- (options)
- case $line[1] in
-
- (start)
- _arguments \
- -F'[Fetch from origin before performing finish]'\
- ':hotfix:__git_flow_version_list'\
- ':branch-name:__git_branch_names'
- ;;
-
- (finish)
- _arguments \
- -F'[Fetch from origin before performing finish]' \
- -s'[Sign the release tag cryptographically]'\
- -u'[Use the given GPG-key for the digital signature (implies -s)]'\
- -m'[Use the given tag message]'\
- -p'[Push to $ORIGIN after performing finish]'\
- -k'[Keep branch after performing finish]'\
- -n"[Don't tag this release]"\
- ':hotfix:__git_flow_hotfix_list'
- ;;
-
- *)
- _arguments \
- -v'[Verbose (more) output]'
- ;;
- esac
- ;;
- esac
-}
-
-__git-flow-feature ()
-{
- 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 feature branch.'
- 'finish:Finish a feature branch.'
- 'list:List all your feature branches. (Alias to `git flow feature`)'
- 'publish: publish'
- 'track: track'
- 'diff: diff'
- 'rebase: rebase'
- 'checkout: checkout'
- 'pull: pull'
- )
- _describe -t commands 'git flow feature' subcommands
- _arguments \
- -v'[Verbose (more) output]'
- ;;
-
- (options)
- case $line[1] in
-
- (start)
- _arguments \
- -F'[Fetch from origin before performing finish]'\
- ':feature:__git_flow_feature_list'\
- ':branch-name:__git_branch_names'
- ;;
-
- (finish)
- _arguments \
- -F'[Fetch from origin before performing finish]' \
- -r'[Rebase instead of merge]'\
- -k'[Keep branch after performing finish]'\
- ':feature:__git_flow_feature_list'
- ;;
-
- (publish)
- _arguments \
- ':feature:__git_flow_feature_list'\
- ;;
-
- (track)
- _arguments \
- ':feature:__git_flow_feature_list'\
- ;;
-
- (diff)
- _arguments \
- ':branch:__git_flow_feature_list'\
- ;;
-
- (rebase)
- _arguments \
- -i'[Do an interactive rebase]' \
- ':branch:__git_flow_feature_list'
- ;;
-
- (checkout)
- _arguments \
- ':branch:__git_flow_feature_list'\
- ;;
-
- (pull)
- _arguments \
- ':remote:__git_remotes'\
- ':branch:__git_flow_feature_list'
- ;;
-
- *)
- _arguments \
- -v'[Verbose (more) output]'
- ;;
- esac
- ;;
- esac
-}
-
-__git_flow_version_list ()
-{
- local expl
- declare -a versions
-
- versions=(${${(f)"$(_call_program versions git flow release list 2> /dev/null | tr -d ' |*')"}})
- __git_command_successful || return
-
- _wanted versions expl 'version' compadd $versions
-}
-
-__git_flow_feature_list ()
-{
- local expl
- declare -a features
-
- features=(${${(f)"$(_call_program features git flow feature list 2> /dev/null | tr -d ' |*')"}})
- __git_command_successful || return
-
- _wanted features expl 'feature' compadd $features
-}
-
-__git_remotes () {
- local expl gitdir remotes
-
- gitdir=$(_call_program gitdir git rev-parse --git-dir 2>/dev/null)
- __git_command_successful || return
-
- remotes=(${${(f)"$(_call_program remotes git config --get-regexp '"^remote\..*\.url$"')"}//#(#b)remote.(*).url */$match[1]})
- __git_command_successful || return
-
- # TODO: Should combine the two instead of either or.
- if (( $#remotes > 0 )); then
- _wanted remotes expl remote compadd $* - $remotes
- else
- _wanted remotes expl remote _files $* - -W "($gitdir/remotes)" -g "$gitdir/remotes/*"
- fi
-}
-
-__git_flow_hotfix_list ()
-{
- local expl
- declare -a hotfixes
-
- hotfixes=(${${(f)"$(_call_program hotfixes git flow hotfix list 2> /dev/null | tr -d ' |*')"}})
- __git_command_successful || return
-
- _wanted hotfixes expl 'hotfix' compadd $hotfixes
-}
-
-__git_branch_names () {
- local expl
- declare -a branch_names
-
- branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads 2>/dev/null)"}#refs/heads/})
- __git_command_successful || return
-
- _wanted branch-names expl branch-name compadd $* - $branch_names
-}
-
-__git_command_successful () {
- if (( ${#pipestatus:#0} > 0 )); then
- _message 'not a git repository'
- return 1
- fi
- return 0
-}
-
-zstyle ':completion:*:*:git:*' user-commands flow:'description for foo'
+# Source completion script
+# Handle $0 according to the standard:
+# https://zdharma-continuum.github.io/Zsh-100-Commits-Club/Zsh-Plugin-Standard.html
+0="${${ZERO:-${0:#$ZSH_ARGZERO}}:-${(%):-%N}}"
+0="${${(M)0:#/*}:-$PWD/$0}"
+source "${0:A:h}/_git-flow"