summaryrefslogtreecommitdiff
path: root/oh-my-zsh/plugins/git-flow
diff options
context:
space:
mode:
Diffstat (limited to 'oh-my-zsh/plugins/git-flow')
-rw-r--r--oh-my-zsh/plugins/git-flow/README.md40
-rw-r--r--oh-my-zsh/plugins/git-flow/_git-flow327
-rw-r--r--oh-my-zsh/plugins/git-flow/git-flow.plugin.zsh32
3 files changed, 399 insertions, 0 deletions
diff --git a/oh-my-zsh/plugins/git-flow/README.md b/oh-my-zsh/plugins/git-flow/README.md
new file mode 100644
index 0000000..fc8ccf0
--- /dev/null
+++ b/oh-my-zsh/plugins/git-flow/README.md
@@ -0,0 +1,40 @@
+# Git-Flow plugin
+
+This plugin adds completion and aliases for the [`git-flow` command](https://github.com/nvie/gitflow).
+
+To use it, add `git-flow` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... git-flow)
+```
+
+## Aliases
+
+| Alias | Command | Description |
+| --------- | ----------------------------------------- | ---------------------------------------------- |
+| `gcd` | `git checkout develop` | Check out develop branch |
+| `gch` | `git checkout hotfix` | Check out hotfix branch |
+| `gcr` | `git checkout release` | Check out release branch |
+| `gfl` | `git flow` | Git-Flow command |
+| `gflf` | `git flow feature` | List existing feature branches |
+| `gflff` | `git flow feature finish` | Finish feature: `gflff <name>` |
+| `gflffc` | `gflff ${$(git_current_branch)#feature/}` | Finish current feature |
+| `gflfp` | `git flow feature publish` | Publish feature: `gflfp <name>` |
+| `gflfpc` | `gflfp ${$(git_current_branch)#feature/}` | Publish current feature |
+| `gflfpll` | `git flow feature pull` | Pull remote feature: `gflfpll <remote> <name>` |
+| `gflfs` | `git flow feature start` | Start a new feature: `gflfs <name>` |
+| `gflh` | `git flow hotfix` | List existing hotfix branches |
+| `gflhf` | `git flow hotfix finish` | Finish hotfix: `gflhf <version>` |
+| `gflhfc` | `gflhf ${$(git_current_branch)#hotfix/}` | Finish current hotfix |
+| `gflhp` | `git flow hotfix publish` | Publish hostfix: `gflhp <version>` |
+| `gflhpc` | `gflhp ${$(git_current_branch)#hotfix/}` | Finish current hotfix |
+| `gflhs` | `git flow hotfix start` | Start a new hotfix: `gflhs <version>` |
+| `gfli` | `git flow init` | Initialize git-flow repository |
+| `gflr` | `git flow release` | List existing release branches |
+| `gflrf` | `git flow release finish` | Finish release: `gflrf <version>` |
+| `gflrfc` | `gflrf ${$(git_current_branch)#release/}` | Finish current release |
+| `gflrp` | `git flow release publish` | Publish release: `gflrp <version>` |
+| `gflrpc` | `gflrp ${$(git_current_branch)#release/}` | Publish current release |
+| `gflrs` | `git flow release start` | Start a new release: `gflrs <version>` |
+
+[More information about `git-flow` commands](https://github.com/nvie/gitflow/wiki/Command-Line-Arguments).
diff --git a/oh-my-zsh/plugins/git-flow/_git-flow b/oh-my-zsh/plugins/git-flow/_git-flow
new file mode 100644
index 0000000..eab7127
--- /dev/null
+++ b/oh-my-zsh/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/oh-my-zsh/plugins/git-flow/git-flow.plugin.zsh b/oh-my-zsh/plugins/git-flow/git-flow.plugin.zsh
new file mode 100644
index 0000000..f842de9
--- /dev/null
+++ b/oh-my-zsh/plugins/git-flow/git-flow.plugin.zsh
@@ -0,0 +1,32 @@
+# Aliases
+alias gcd='git checkout $(git config gitflow.branch.develop)'
+alias gch='git checkout $(git config gitflow.prefix.hotfix)'
+alias gcr='git checkout $(git config gitflow.prefix.release)'
+alias gfl='git flow'
+alias gflf='git flow feature'
+alias gflff='git flow feature finish'
+alias gflffc='git flow feature finish ${$(git_current_branch)#feature/}'
+alias gflfp='git flow feature publish'
+alias gflfpc='git flow feature publish ${$(git_current_branch)#feature/}'
+alias gflfpll='git flow feature pull'
+alias gflfs='git flow feature start'
+alias gflh='git flow hotfix'
+alias gflhf='git flow hotfix finish'
+alias gflhfc='git flow hotfix finish ${$(git_current_branch)#hotfix/}'
+alias gflhp='git flow hotfix publish'
+alias gflhpc='git flow hotfix publish ${$(git_current_branch)#hotfix/}'
+alias gflhs='git flow hotfix start'
+alias gfli='git flow init'
+alias gflr='git flow release'
+alias gflrf='git flow release finish'
+alias gflrfc='git flow release finish ${$(git_current_branch)#release/}'
+alias gflrp='git flow release publish'
+alias gflrpc='git flow release publish ${$(git_current_branch)#release/}'
+alias gflrs='git flow release start'
+
+# 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"