mirror of
				https://github.com/ohmyzsh/ohmyzsh.git
				synced 2024-05-11 05:55:17 +00:00 
			
		
		
		
	
		
			
	
	
		
			273 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			273 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								#compdef repo
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__git_apply_whitespace_strategies ()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  declare -a strategies
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  strategies=(
							 | 
						||
| 
								 | 
							
								    'nowarn:turn off the trailing-whitespace warning'
							 | 
						||
| 
								 | 
							
								    'warn:output trailing-whitespace warning, but apply patch'
							 | 
						||
| 
								 | 
							
								    'fix:output trailing-whitespace warning and strip trailing whitespace'
							 | 
						||
| 
								 | 
							
								    'error:output trailing-whitespace warning and refuse to apply patch'
							 | 
						||
| 
								 | 
							
								    'error-all:same as "error", but output warnings for all files')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  _describe -t strategies 'trailing-whitespace resolution strategy' strategies $*
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								_repo()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  local context state state_descr line curcontext="$curcontext"
							 | 
						||
| 
								 | 
							
								  typeset -A opt_args
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  local ret=1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  _arguments -C \
							 | 
						||
| 
								 | 
							
								    '(- 1 *)--help[show usage]'\
							 | 
						||
| 
								 | 
							
								    '1:command:->command'\
							 | 
						||
| 
								 | 
							
								    '*::args:->args' && ret=0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  case $state in
							 | 
						||
| 
								 | 
							
								    (command)
							 | 
						||
| 
								 | 
							
								      repo list  2> /dev/null > /dev/null
							 | 
						||
| 
								 | 
							
								      if [[ $? == 0 ]]; then
							 | 
						||
| 
								 | 
							
								        local commands;
							 | 
						||
| 
								 | 
							
								        commands=(
							 | 
						||
| 
								 | 
							
								          'abandon:Permanently abandon a development branch'
							 | 
						||
| 
								 | 
							
								          'branch:View current topic branches'
							 | 
						||
| 
								 | 
							
								          'branches:View current topic branches'
							 | 
						||
| 
								 | 
							
								          'checkout:Checkout a branch for development'
							 | 
						||
| 
								 | 
							
								          'cherry-pick:Cherry-pick a change.'
							 | 
						||
| 
								 | 
							
								          'diff:Show changes between commit and working tree'
							 | 
						||
| 
								 | 
							
								          'download:Download and checkout a change'
							 | 
						||
| 
								 | 
							
								          'forall:execute command on several project'
							 | 
						||
| 
								 | 
							
								          'grep:Print lines matching a pattern'
							 | 
						||
| 
								 | 
							
								          'help:Display detailed help on a command'
							 | 
						||
| 
								 | 
							
								          'init:Initialize repo in the current directory'
							 | 
						||
| 
								 | 
							
								          'list:List projects and their associated directories'
							 | 
						||
| 
								 | 
							
								          'manifest:Manifest inspection utility'
							 | 
						||
| 
								 | 
							
								          'overview:Display overview of unmerged project branches'
							 | 
						||
| 
								 | 
							
								          'prune:Prune (delete) already merged topics'
							 | 
						||
| 
								 | 
							
								          'rebase:Rebase local branches on upstream branch'
							 | 
						||
| 
								 | 
							
								          'selfupdate:Update repo to the latest version'
							 | 
						||
| 
								 | 
							
								          'smartsync:Update working tree to the latest known good revision'
							 | 
						||
| 
								 | 
							
								          'stage:Stage file(s) for commit'
							 | 
						||
| 
								 | 
							
								          'start:Start a new branch for development'
							 | 
						||
| 
								 | 
							
								          'status:Show the working tree status'
							 | 
						||
| 
								 | 
							
								          'sync:Update working tree to the latest revision'
							 | 
						||
| 
								 | 
							
								          'upload:Upload changes for code review'
							 | 
						||
| 
								 | 
							
								          'version:Display the version of repo'
							 | 
						||
| 
								 | 
							
								        )
							 | 
						||
| 
								 | 
							
								        _describe -t commands 'command' commands && ret=0
							 | 
						||
| 
								 | 
							
								      else
							 | 
						||
| 
								 | 
							
								        local commands;
							 | 
						||
| 
								 | 
							
								        commands=(
							 | 
						||
| 
								 | 
							
								          'init:Install repo in the current working directory'
							 | 
						||
| 
								 | 
							
								          'help:Display detailed help on a command'
							 | 
						||
| 
								 | 
							
								        )
							 | 
						||
| 
								 | 
							
								        _describe -t commands 'command' commands && ret=0
							 | 
						||
| 
								 | 
							
								      fi
							 | 
						||
| 
								 | 
							
								      ;;
							 | 
						||
| 
								 | 
							
								    (args)
							 | 
						||
| 
								 | 
							
								      case $words[1] in
							 | 
						||
| 
								 | 
							
								        (branch | branches)
							 | 
						||
| 
								 | 
							
								          # TODO : list available projects and add them in list to feed compadd with
							 | 
						||
| 
								 | 
							
								          _arguments  : \
							 | 
						||
| 
								 | 
							
								                     "(-h --help)"{-h,--help}"[Show help]" \
							 | 
						||
| 
								 | 
							
								                     ': :__repo_projects' \
							 | 
						||
| 
								 | 
							
								                      && ret=0
							 | 
						||
| 
								 | 
							
								         ;;
							 | 
						||
| 
								 | 
							
								        (abandon)
							 | 
						||
| 
								 | 
							
								          # TODO : list available projects and add them in list to feed compadd with
							 | 
						||
| 
								 | 
							
								          _arguments  : \
							 | 
						||
| 
								 | 
							
								                     "(-h --help)"{-h,--help}"[Show help]" \
							 | 
						||
| 
								 | 
							
								                     ':branch name:__repo_branch' \
							 | 
						||
| 
								 | 
							
								                     ': :__repo_projects'\
							 | 
						||
| 
								 | 
							
								                      && ret=0
							 | 
						||
| 
								 | 
							
								          ;;
							 | 
						||
| 
								 | 
							
								        (checkout)
							 | 
						||
| 
								 | 
							
								          # TODO : list available projects and add them in list to feed compadd with
							 | 
						||
| 
								 | 
							
								          _arguments  : \
							 | 
						||
| 
								 | 
							
								                     "(-h --help)"{-h,--help}"[Show help]" \
							 | 
						||
| 
								 | 
							
								                     ':branch name:__repo_branch' \
							 | 
						||
| 
								 | 
							
								                     ': :__repo_projects'\
							 | 
						||
| 
								 | 
							
								                     && ret=0
							 | 
						||
| 
								 | 
							
								          ;;
							 | 
						||
| 
								 | 
							
								        (init)
							 | 
						||
| 
								 | 
							
								          _arguments : \
							 | 
						||
| 
								 | 
							
								                     "(-h --help)"{-h,--help}"[Show help]" \
							 | 
						||
| 
								 | 
							
								                     "(-q --quiet)"{-q,--quiet}"[be quiet]" \
							 | 
						||
| 
								 | 
							
								                     "(-u --manifest-url)"{-u,--manifest-url=}"[manifest repository location]":url:__repo_url_prompt \
							 | 
						||
| 
								 | 
							
								                     "(-b --manifest-branch)"{-b,--manifest-branch=}"[manifest branch or revision]":branch:__repo_branch\
							 | 
						||
| 
								 | 
							
								                     "(-m --manifest-name)"{-m,--manifest-name=}"[initial manifest file]":manifest_name:__repo_manifest_name\
							 | 
						||
| 
								 | 
							
								                     "(--mirror)--mirror[mirror the forrest]"\
							 | 
						||
| 
								 | 
							
								                     "(--reference)--reference=[location of mirror directory]":dir:_dirs\
							 | 
						||
| 
								 | 
							
								                     "(--depth)--depth=[create a shallow clone with given depth; see git clone]":depth:__repo_depth_prompt\
							 | 
						||
| 
								 | 
							
								                     "(-g --group=)"{-g,--group=}"[restrict manifest projects to ones with a specified group]":group:_group\
							 | 
						||
| 
								 | 
							
								                     "(-p --platform=)"{-p,--platform=}"[restrict manifest projects to ones with a specified platform group(auto|all|none|linux|darwin|...)]":platform:"(auto all none linux darwin)"\
							 | 
						||
| 
								 | 
							
								                     "(--repo-url)--repo-url=[repo repository location]":url:__repo_url_prompt\
							 | 
						||
| 
								 | 
							
								                     "(--repo-branch)--repo-branch[repo branch or revision]":branch_or_rev:__repo__repo_branch_or_rev\
							 | 
						||
| 
								 | 
							
								                     "(--no-repo-verify)--no-repo-verify[do not verify repo source code]"\
							 | 
						||
| 
								 | 
							
								                     "(--config-name)--config-name[Always prompt for name/e-mail]"\
							 | 
						||
| 
								 | 
							
								                     && ret=0
							 | 
						||
| 
								 | 
							
								          ;;
							 | 
						||
| 
								 | 
							
								        (start)
							 | 
						||
| 
								 | 
							
								          _arguments : \
							 | 
						||
| 
								 | 
							
								                     "(-h --help)"{-h,--help}"[Show help]" \
							 | 
						||
| 
								 | 
							
								                     "(--all)--all=[begin branch in all projects]"\
							 | 
						||
| 
								 | 
							
								                    ':branch name:__repo_new__repo_branch_name' \
							 | 
						||
| 
								 | 
							
								                    ':projects:__repo_projects_or_all' \
							 | 
						||
| 
								 | 
							
								                    && ret=0
							 | 
						||
| 
								 | 
							
								          ;;
							 | 
						||
| 
								 | 
							
								        (rebase)
							 | 
						||
| 
								 | 
							
								          _arguments : \
							 | 
						||
| 
								 | 
							
								                     "(-h --help)"{-h,--help}"[Show help]" \
							 | 
						||
| 
								 | 
							
								                     "(-i --interactive)"{-i,--interactive}"[interactive rebase (single project only)]: :__repo_projects" \
							 | 
						||
| 
								 | 
							
								                     "(-f --force-rebase)"{-f,--force-rebase}"[Pass --force-rebase to git rebase]" \
							 | 
						||
| 
								 | 
							
								                     "(--no-ff)--no-ff=[Pass --no-ff to git rebase]"\
							 | 
						||
| 
								 | 
							
								                     "(-q --quiet)"{-q,--quiet}"[Pass --quiet to git rebase]" \
							 | 
						||
| 
								 | 
							
								                     "(--autosquash)--no-ff[Pass --autosquash to git rebase]"\
							 | 
						||
| 
								 | 
							
								                     "(--whitespace=)--whitespace=[Pass --whitespace to git rebase]: :__git_apply_whitespace_strategies"\
							 | 
						||
| 
								 | 
							
								                     "(--auto-stash)--auto-stash[Stash local modifications before starting]"\
							 | 
						||
| 
								 | 
							
								                     && ret=0
							 | 
						||
| 
								 | 
							
								          ;;
							 | 
						||
| 
								 | 
							
								        (checkout)
							 | 
						||
| 
								 | 
							
								          _arguments : \
							 | 
						||
| 
								 | 
							
								                     "(-h --help)"{-h,--help}"[Show help]" \
							 | 
						||
| 
								 | 
							
								                    ':branch name:__git_branch_names' \
							 | 
						||
| 
								 | 
							
								                    ':projects:__repo_projects' \
							 | 
						||
| 
								 | 
							
								                    && ret=0
							 | 
						||
| 
								 | 
							
								          ;;
							 | 
						||
| 
								 | 
							
								        (list)
							 | 
						||
| 
								 | 
							
								          _arguments : \
							 | 
						||
| 
								 | 
							
								                     "(-h --help)"{-h,--help}"[Show help]" \
							 | 
						||
| 
								 | 
							
								                    && ret=0
							 | 
						||
| 
								 | 
							
								          ;;
							 | 
						||
| 
								 | 
							
								        (status)
							 | 
						||
| 
								 | 
							
								          _arguments : \
							 | 
						||
| 
								 | 
							
								                     "(-h --help)"{-h,--help}"[Show help]" \
							 | 
						||
| 
								 | 
							
								                     "(-j --jobs)"{-j,--jobs}"[number of projects to check simultaneously]" \
							 | 
						||
| 
								 | 
							
								                    ':projects:__repo_projects' \
							 | 
						||
| 
								 | 
							
								                    && ret=0
							 | 
						||
| 
								 | 
							
								          ;;
							 | 
						||
| 
								 | 
							
								        (sync)
							 | 
						||
| 
								 | 
							
								          _arguments : \
							 | 
						||
| 
								 | 
							
								                     "(-h --help)"{-h,--help}"[Show help]" \
							 | 
						||
| 
								 | 
							
								                     "(--no-force-broken)--no-force-broken[stop sync if a project fails to sync (probably because of permissions)]" \
							 | 
						||
| 
								 | 
							
								                     "(-l --local-only)"{-l,--local-only}"[only update working tree, don't fetch]" \
							 | 
						||
| 
								 | 
							
								                     "(-n --network-only)"{-n,--network-branch}"[fetch only, don't update working tree]" \
							 | 
						||
| 
								 | 
							
								                     "(-d --detach)"{-d,--detach}"[detach projects back to manifest revision]" \
							 | 
						||
| 
								 | 
							
								                     "(-c --current-branch)"{-c,--current-branch}"[fetch only current branch from server]" \
							 | 
						||
| 
								 | 
							
								                     "(-q --quiet)"{-q,--quiet}"[be more quiet]" \
							 | 
						||
| 
								 | 
							
								                     "(-j --jobs=)"{-j,--jobs=}"[projects to fetch simultaneously (default 1) (limited to 5)]:projects to fetch simultaneously (default 1) (limited to 5)" \
							 | 
						||
| 
								 | 
							
								                     "(-m --manifest-name=)"{-m,--manifest-name=}"[temporary manifest to use for this sync]:manifest xml file:_files -g *.xml" \
							 | 
						||
| 
								 | 
							
								                     "(--no-clone-bundle)--no-clone-bundle[disable use of /clone.bundle on HTTP/HTTPS]" \
							 | 
						||
| 
								 | 
							
								                     "(-s --smart-sync)"{-s,--smart-sync=}"[smart sync using manifest from a known tag]:tag:" \
							 | 
						||
| 
								 | 
							
								                     '(--no-repo-verify)--no-repo-verify[do not verify repo source code]' \
							 | 
						||
| 
								 | 
							
								                     ': :__repo_projects' \
							 | 
						||
| 
								 | 
							
								                     && ret=0
							 | 
						||
| 
								 | 
							
								          ;;
							 | 
						||
| 
								 | 
							
								        (upload)
							 | 
						||
| 
								 | 
							
								          _arguments : \
							 | 
						||
| 
								 | 
							
								                     "(-h --help)"{-h,--help}"[Show help]" \
							 | 
						||
| 
								 | 
							
								                     "(-t)-t[Send local branch name to Gerrit Code Review]" \
							 | 
						||
| 
								 | 
							
								                     "(--re= --reviewers=)"{--re=,--reviewers=}"[Request reviews from these people]:Request reviews from these people:" \
							 | 
						||
| 
								 | 
							
								                     "(--cc=)--cc=[Also send email to these email addresses.]:email addresses:_email_addresses" \
							 | 
						||
| 
								 | 
							
								                     "(--br=)--br=[Branch to upload.]:branch:__repo_branch" \
							 | 
						||
| 
								 | 
							
								                     "(--cbr --current-branch)"{--cbr,--current-branch}"[Upload current git branch]" \
							 | 
						||
| 
								 | 
							
								                     "(-d --draft)"{-d,--draft}"[If specified, upload as a draft.]" \
							 | 
						||
| 
								 | 
							
								                     "(--verify --no-verify)--no-verify[Do not run the upload hook.]" \
							 | 
						||
| 
								 | 
							
								                     '(--verify --no-verify)--verify[Run the upload hook without prompting]' \
							 | 
						||
| 
								 | 
							
								                     ': :__repo_projects' \
							 | 
						||
| 
								 | 
							
								                     && ret=0
							 | 
						||
| 
								 | 
							
								          ;;
							 | 
						||
| 
								 | 
							
								        (forall)
							 | 
						||
| 
								 | 
							
								          _arguments : \
							 | 
						||
| 
								 | 
							
								                     "(-h --help)"{-h,--help}"[Show help]" \
							 | 
						||
| 
								 | 
							
								                     "(-v --verbose)"{-v,--verbose}"[Show command error messages]" \
							 | 
						||
| 
								 | 
							
								                     '(-p)-p[Show project headers before output]' \
							 | 
						||
| 
								 | 
							
								                     ': :__repo_projects_mandatory' \
							 | 
						||
| 
								 | 
							
								                     "(-c --command -h --help -v --verbose -p)"{-c,--command}"[Command (and arguments) to execute]" \
							 | 
						||
| 
								 | 
							
								                     && ret=0
							 | 
						||
| 
								 | 
							
								          ;;
							 | 
						||
| 
								 | 
							
								        *)
							 | 
						||
| 
								 | 
							
								          ret=0
							 | 
						||
| 
								 | 
							
								      esac
							 | 
						||
| 
								 | 
							
								      ;;
							 | 
						||
| 
								 | 
							
								  esac
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return $ret
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__repo_reviewers()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								 # _message -e url 'reviewers'
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__repo_url_prompt()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  _message -e url 'url'
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__repo_manifest_name()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  _message -e manifest_name 'manifest name'
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								_group()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  _message -e group 'group'
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__repo_branch()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  #_message -e branch 'Repo branch'
							 | 
						||
| 
								 | 
							
								  branches=($(repo branches| cut -c4- | grep '|' | cut -d' ' -f1))
							 | 
						||
| 
								 | 
							
								  _describe -t branches 'Select repo branch' branches
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__repo__repo_branch_or_rev()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  _message -e branch_or_rev 'repo branch or revision'
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__repo_depth_prompt()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  _message -e depth 'depth'
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__repo_projects()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  _message -e depth 'Optional option : <projects>...'
							 | 
						||
| 
								 | 
							
								  projects=($(repo list | cut -d' ' -f1))
							 | 
						||
| 
								 | 
							
								  _describe -t projects 'Select projects (keep empty for selecting all projects)' projects
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__repo_projects_mandatory()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  projects=($(repo list | cut -d' ' -f1))
							 | 
						||
| 
								 | 
							
								  #_describe -t projects 'Select projects to apply commands' projects
							 | 
						||
| 
								 | 
							
								  _values -s ' ' "Select projects to apply commands" $projects
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__repo_new__repo_branch_name()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  branches=($(repo branches| cut -c4- | grep '|' | cut -d' ' -f1))
							 | 
						||
| 
								 | 
							
								  _describe "" branches
							 | 
						||
| 
								 | 
							
								  _message -e "branch name" 'Enter new branch name or select an existing repo branch'
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__repo_projects_or_all()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  #_message -e depth '[--all | <project>...]'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  projects=(--all $(repo list | cut -d' ' -f1))
							 | 
						||
| 
								 | 
							
								  _describe -t projects 'Select projects or --all' projects
							 | 
						||
| 
								 | 
							
								  _describe -t --all 'All projects'
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								_repo "$@"
							 | 
						||
| 
								 | 
							
								return $?
							 | 
						||
| 
								 | 
							
								
							 |