Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
O
oh-my-zsh
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
github
oh-my-zsh
Commits
7a38fa35
Unverified
Commit
7a38fa35
authored
Dec 28, 2021
by
Marc Cornellà
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactor(git-flow): extract `git-flow` completion logic
parent
89ab38fe
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
334 additions
and
350 deletions
+334
-350
_git-flow
plugins/git-flow/_git-flow
+327
-0
git-flow.plugin.zsh
plugins/git-flow/git-flow.plugin.zsh
+7
-350
No files found.
plugins/git-flow/_git-flow
0 → 100644
View file @
7a38fa35
#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 "$@"
plugins/git-flow/git-flow.plugin.zsh
View file @
7a38fa35
#!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"
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