Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Ohmyzsh
Commits
3dc1d929
Commit
3dc1d929
authored
Dec 01, 2012
by
Robby Russell
Browse files
Merge pull request #1442 from willman500/git-hub-flow-plugin
Add autocomplete for git "hubflow"
parents
f69b05b0
1b4393fb
Changes
1
Hide whitespace changes
Inline
Side-by-side
plugins/git-hubflow/git-hubflow.plugin.zsh
0 → 100644
View file @
3dc1d929
#!zsh
#
# Installation
# ------------
#
# To achieve git-hubflow 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-hubflow-completion.zsh) and put the following line in
# your .zshrc:
#
# source ~/.git-hubflow-completion.zsh
#
# c. Or, use this file as a oh-my-zsh plugin.
#
_git-hf
()
{
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.'
'update:Pull upstream changes down into your master and develop branches.'
'version:Shows version information.'
)
_describe
-t
commands
'git hf'
subcommands
;;
(
options
)
case
$line
[
1]
in
(
init
)
_arguments
\
-f
'[Force setting of gitflow branches, even if already configured]'
;;
(
version
)
;;
(
hotfix
)
__git-hf-hotfix
;;
(
release
)
__git-hf-release
;;
(
feature
)
__git-hf-feature
;;
esac
;;
esac
}
__git-hf-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 hf release`)'
'cancel:Cancel release'
'push:Push release to github'
'pull:Pull release from github'
'track:Track release'
)
_describe
-t
commands
'git hf release'
subcommands
_arguments
\
-v
'[Verbose (more) output]'
;;
(
options
)
case
$line
[
1]
in
(
start
)
_arguments
\
-F
'[Fetch from origin before performing finish]'
\
':version:__git_hf_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_hf_version_list'
;;
*
)
_arguments
\
-v
'[Verbose (more) output]'
;;
esac
;;
esac
}
__git-hf-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 hf hotfix`)'
'publish:Publish the hotfix branch.'
'track:Track the hotfix branch.'
'pull:Pull the hotfix from github.'
'push:Push the hotfix to github.'
'cancel:Cancel the hotfix.'
)
_describe
-t
commands
'git hf hotfix'
subcommands
_arguments
\
-v
'[Verbose (more) output]'
;;
(
options
)
case
$line
[
1]
in
(
start
)
_arguments
\
-F
'[Fetch from origin before performing finish]'
\
':hotfix:__git_hf_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_hf_hotfix_list'
;;
*
)
_arguments
\
-v
'[Verbose (more) output]'
;;
esac
;;
esac
}
__git-hf-feature
()
{
local
curcontext
=
"
$curcontext
"
state line
typeset
-A
opt_args
_arguments
-C
\
':command:->command'
\
'*::options:->options'
case
$state
in
(
command
)
local
-a
subcommands
subcommands
=(
'list:List all your feature branches. (Alias to `git hf feature`)'
'start:Start a new feature branch'
'finish:Finish a feature branch'
'submit:submit'
'track:track'
'diff:Diff'
'rebase:Rebase feature branch against develop'
'checkout:Checkout feature'
'pull:Pull feature branch from github'
'push:Push feature branch to github'
'cancel:Cancel feature'
)
_describe
-t
commands
'git hf feature'
subcommands
_arguments
\
-v
'[Verbose (more) output]'
;;
(
options
)
case
$line
[
1]
in
(
start
)
_arguments
\
-F
'[Fetch from origin before performing finish]'
\
':feature:__git_hf_feature_list'
\
':branch-name:__git_branch_names'
;;
(
finish
)
_arguments
\
-F
'[Fetch from origin before performing finish]'
\
-r
'[Rebase instead of merge]'
\
':feature:__git_hf_feature_list'
;;
(
publish
)
_arguments
\
':feature:__git_hf_feature_list'
\
;;
(
track
)
_arguments
\
':feature:__git_hf_feature_list'
\
;;
(
diff
)
_arguments
\
':branch:__git_branch_names'
\
;;
(
rebase
)
_arguments
\
-i
'[Do an interactive rebase]'
\
':branch:__git_branch_names'
;;
(
checkout
)
_arguments
\
':branch:__git_hf_feature_list'
\
;;
(
pull
)
_arguments
\
':remote:__git_remotes'
\
':branch:__git_branch_names'
;;
*
)
_arguments
\
-v
'[Verbose (more) output]'
;;
esac
;;
esac
}
__git_hf_version_list
()
{
local
expl
declare
-a
versions
versions
=(
${${
(f)
"
$(
_call_program versions git hf release list 2> /dev/null |
tr
-d
' |*'
)
"
}}
)
__git_command_successful
||
return
_wanted versions expl
'version'
compadd
$versions
}
__git_hf_feature_list
()
{
local
expl
declare
-a
features
features
=(
${${
(f)
"
$(
_call_program features git hf 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_hf_hotfix_list
()
{
local
expl
declare
-a
hotfixes
hotfixes
=(
${${
(f)
"
$(
_call_program hotfixes git hf 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'
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment