mirror of
				https://github.com/dcarrillo/prezto.git
				synced 2025-10-30 06:59:08 +00:00 
			
		
		
		
	Added git-flow plugin
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -3,3 +3,4 @@ log/.zsh_history | ||||
| projects.zsh | ||||
| custom/* | ||||
| !custom/example.zsh | ||||
| cache | ||||
|   | ||||
							
								
								
									
										332
									
								
								plugins/git-flow/git-flow.plugin.zsh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										332
									
								
								plugins/git-flow/git-flow.plugin.zsh
									
									
									
									
									
										Normal file
									
								
							| @@ -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' | ||||
		Reference in New Issue
	
	Block a user