| 
									
										
										
										
											2020-12-28 17:26:35 +00:00
										 |  |  | #compdef yadm | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-04 23:25:24 +00:00
										 |  |  | # This completion tries to fallback to git's completion for git commands. | 
					
						
							| 
									
										
										
										
											2021-01-05 22:16:10 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | zstyle -T ':completion:*:yadm:argument-1:descriptions:' format && \ | 
					
						
							|  |  |  |     zstyle ':completion:*:yadm:argument-1:descriptions' format '%d:' | 
					
						
							|  |  |  | zstyle -T ':completion:*:yadm:*:yadm' group-name && \ | 
					
						
							|  |  |  |     zstyle ':completion:*:yadm:*:yadm' group-name '' | 
					
						
							| 
									
										
										
										
											2021-01-04 23:25:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-28 17:26:35 +00:00
										 |  |  | _yadm-alt() { | 
					
						
							|  |  |  |     return 0 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _yadm-bootstrap() { | 
					
						
							|  |  |  |     return 0 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _yadm-clone() { | 
					
						
							|  |  |  |     _arguments \ | 
					
						
							|  |  |  |         '(--bootstrap --no-bootstrap)--bootstrap[force bootstrap, without prompt]' \ | 
					
						
							|  |  |  |         '(--bootstrap --no-bootstrap)--no-bootstrap[prevent bootstrap, without prompt]' \ | 
					
						
							|  |  |  |         '-b[branch name]:' \ | 
					
						
							|  |  |  |         '-f[force overwrite of existing repository]' \ | 
					
						
							|  |  |  |         '-w[work tree path]: :_files -/' \ | 
					
						
							|  |  |  |         '*:' | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _yadm-config() { | 
					
						
							|  |  |  |     # TODO: complete config names | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _yadm-decrypt() { | 
					
						
							|  |  |  |     _arguments \ | 
					
						
							|  |  |  |         '-l[list files]' | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _yadm-encrypt() { | 
					
						
							|  |  |  |     return 0 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _yadm-enter() { | 
					
						
							|  |  |  |     _arguments \ | 
					
						
							|  |  |  |         ':command: _command_names -e' \ | 
					
						
							|  |  |  |         '*::arguments: _normal' | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _yadm-git-crypt() { | 
					
						
							|  |  |  |     # TODO: complete git-crypt options | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _yadm-help() { | 
					
						
							|  |  |  |     return 0 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _yadm-init() { | 
					
						
							|  |  |  |     _arguments \ | 
					
						
							|  |  |  |         '-f[force overwrite of existing repository]' \ | 
					
						
							|  |  |  |         '-w[work tree path]: :_files -/' | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _yadm-list() { | 
					
						
							|  |  |  |     _arguments \ | 
					
						
							|  |  |  |         '-a[list all tracked files]' | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _yadm-perms() { | 
					
						
							|  |  |  |     return 0 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _yadm-transcrypt() { | 
					
						
							| 
									
										
										
										
											2021-01-04 23:25:24 +00:00
										 |  |  |     integer _ret=1 | 
					
						
							|  |  |  |     _call_function _ret _transcrypt | 
					
						
							|  |  |  |     return _ret | 
					
						
							| 
									
										
										
										
											2020-12-28 17:26:35 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _yadm-upgrade() { | 
					
						
							| 
									
										
										
										
											2021-01-05 22:16:10 +00:00
										 |  |  |     _arguments \ | 
					
						
							|  |  |  |         '-f[force deinit of submodules]' \ | 
					
						
							|  |  |  |         ': ' | 
					
						
							| 
									
										
										
										
											2020-12-28 17:26:35 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _yadm-version() { | 
					
						
							|  |  |  |     return 0 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _yadm_commands() { | 
					
						
							| 
									
										
										
										
											2021-01-05 22:16:10 +00:00
										 |  |  |     local -a commands=( | 
					
						
							|  |  |  |         alt:'create links for alternates' | 
					
						
							|  |  |  |         bootstrap:'execute bootstrap' | 
					
						
							|  |  |  |         clone:'clone an existing yadm repository' | 
					
						
							| 
									
										
										
										
											2020-12-28 17:26:35 +00:00
										 |  |  |         config:'configure an yadm setting' | 
					
						
							| 
									
										
										
										
											2021-01-05 22:16:10 +00:00
										 |  |  |         decrypt:'decrypt files' | 
					
						
							|  |  |  |         encrypt:'encrypt files' | 
					
						
							| 
									
										
										
										
											2020-12-28 17:26:35 +00:00
										 |  |  |         enter:'run sub-shell with GIT variables set' | 
					
						
							|  |  |  |         git-crypt:'run git-crypt commands for the yadm repository' | 
					
						
							|  |  |  |         gitconfig:'run the git config command' | 
					
						
							|  |  |  |         help:'display yadm help information' | 
					
						
							|  |  |  |         init:'initialize an empty yadm repository' | 
					
						
							|  |  |  |         list:'list files tracked by yadm' | 
					
						
							| 
									
										
										
										
											2021-01-05 22:16:10 +00:00
										 |  |  |         perms:'fix perms for private files' | 
					
						
							| 
									
										
										
										
											2020-12-28 17:26:35 +00:00
										 |  |  |         transcrypt:'run transcrypt commands for the yadm repository' | 
					
						
							|  |  |  |         upgrade:'upgrade legacy yadm paths' | 
					
						
							|  |  |  |         version:'show yadm version' | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-05 22:16:10 +00:00
										 |  |  |     local oldcontext="$curcontext" | 
					
						
							|  |  |  |     local curcontext="${curcontext%:*:*}:git:" | 
					
						
							| 
									
										
										
										
											2020-12-28 17:26:35 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-05 22:16:10 +00:00
										 |  |  |     words=("git" "${words[-1]}") CURRENT=2 service=git _git | 
					
						
							| 
									
										
										
										
											2020-12-28 17:26:35 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-05 22:16:10 +00:00
										 |  |  |     curcontext="$oldcontext" | 
					
						
							|  |  |  |     _describe -t yadm "yadm commands" commands | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return 0 | 
					
						
							| 
									
										
										
										
											2020-12-28 17:26:35 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _yadm() { | 
					
						
							| 
									
										
										
										
											2021-01-04 23:25:24 +00:00
										 |  |  |     local curcontext=$curcontext state state_descr line | 
					
						
							| 
									
										
										
										
											2020-12-28 17:26:35 +00:00
										 |  |  |     declare -A opt_args | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     _arguments -C \ | 
					
						
							|  |  |  |       '(-Y --yadm-dir)'{-Y,--yadm-dir}'[override the standard yadm directory]: :_files -/' \ | 
					
						
							|  |  |  |       '--yadm-data[override the standard yadm data directory]: :_files -/' \ | 
					
						
							|  |  |  |       '--yadm-repo[override the standard repo path]: :_files -/' \ | 
					
						
							|  |  |  |       '--yadm-config[override the standard config path]: :_files -/' \ | 
					
						
							|  |  |  |       '--yadm-encrypt[override the standard encrypt path]: :_files -/' \ | 
					
						
							|  |  |  |       '--yadm-archive[override the standard archive path]: :_files -/' \ | 
					
						
							|  |  |  |       '--yadm-bootstrap[override the standard bootstrap path]: :_files' \ | 
					
						
							|  |  |  |       '--help[display yadm help information]' \ | 
					
						
							|  |  |  |       '--version[show yadm version]' \ | 
					
						
							|  |  |  |       '(-): :->command' \ | 
					
						
							|  |  |  |       '(-)*:: :->option-or-argument' && return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     local -a repo_args | 
					
						
							|  |  |  |     (( $+opt_args[--yadm-repo] )) && repo_args+=(--yadm-repo "$opt_args[--yadm-repo]") | 
					
						
							|  |  |  |     (( $+opt_args[--yadm-data] )) && repo_args+=(--yadm-data "$opt_args[--yadm-data]") | 
					
						
							|  |  |  |     local -x GIT_DIR="$(_call_program gitdir yadm "${repo_args[@]}" introspect repo)" | 
					
						
							| 
									
										
										
										
											2021-01-05 22:16:10 +00:00
										 |  |  |     [[ -z "$GIT_DIR" ]] && return 1 | 
					
						
							| 
									
										
										
										
											2020-12-28 17:26:35 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-04 23:25:24 +00:00
										 |  |  |     integer _ret=1 | 
					
						
							| 
									
										
										
										
											2020-12-28 17:26:35 +00:00
										 |  |  |     case $state in | 
					
						
							|  |  |  |         (command) | 
					
						
							| 
									
										
										
										
											2021-01-04 23:25:24 +00:00
										 |  |  |             _yadm_commands && _ret=0 | 
					
						
							| 
									
										
										
										
											2020-12-28 17:26:35 +00:00
										 |  |  |             ;; | 
					
						
							|  |  |  |         (option-or-argument) | 
					
						
							| 
									
										
										
										
											2021-01-05 22:16:10 +00:00
										 |  |  |             curcontext=${curcontext%:*:*}:yadm-${words[1]}: | 
					
						
							|  |  |  |             if ! _call_function _ret _yadm-${words[1]}; then | 
					
						
							| 
									
										
										
										
											2021-01-04 23:25:24 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |                 # Translate gitconfig to use the regular completion for config | 
					
						
							| 
									
										
										
										
											2021-01-05 22:16:10 +00:00
										 |  |  |                 [[ ${words[1]} = "gitconfig" ]] && words[1]=config | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 words=("git" "${(@)words}") | 
					
						
							|  |  |  |                 CURRENT=$(( CURRENT + 1 )) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 curcontext=${curcontext%:*:*}:git: | 
					
						
							|  |  |  |                 service=git _git && _ret=0 | 
					
						
							| 
									
										
										
										
											2020-12-28 17:26:35 +00:00
										 |  |  |             fi | 
					
						
							|  |  |  |             ;; | 
					
						
							|  |  |  |     esac | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-04 23:25:24 +00:00
										 |  |  |     return _ret | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-05 22:16:10 +00:00
										 |  |  | (( $+functions[_git] )) && _yadm |