forked from ohmyzsh/ohmyzsh
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
334 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,4 +2,5 @@ locals.zsh | |
log/.zsh_history | ||
projects.zsh | ||
custom/* | ||
!custom/example.zsh | ||
!custom/example.zsh | ||
cache |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,332 @@ | ||
#!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' | ||
;; | ||
|
||
(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]'\ | ||
':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]'\ | ||
':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: public' | ||
'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]'\ | ||
':feature:__git_flow_feature_list' | ||
;; | ||
|
||
(publish) | ||
_arguments \ | ||
':feature:__git_flow_feature_list'\ | ||
;; | ||
|
||
(track) | ||
_arguments \ | ||
':feature:__git_flow_feature_list'\ | ||
;; | ||
|
||
(diff) | ||
_arguments \ | ||
':branch:__git_branch_names'\ | ||
;; | ||
|
||
(rebase) | ||
_arguments \ | ||
-i'[Do an interactive rebase]' \ | ||
':branch:__git_branch_names' | ||
;; | ||
|
||
(checkout) | ||
_arguments \ | ||
':branch:__git_flow_feature_list'\ | ||
;; | ||
|
||
(pull) | ||
_arguments \ | ||
':remote:__git_remotes'\ | ||
':branch:__git_branch_names' | ||
;; | ||
|
||
*) | ||
_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' |