mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-01 21:51:40 +02:00
89 lines
2.3 KiB
Text
89 lines
2.3 KiB
Text
#compdef vcsh
|
|
|
|
function __vcsh_repositories () {
|
|
local -a repos
|
|
repos=( ${(f)"$(_call_program repositories vcsh list)"} )
|
|
_describe -t repositories 'repository' repos
|
|
}
|
|
|
|
function _vcsh-clone () {
|
|
_default #TODO
|
|
}
|
|
|
|
local func
|
|
for func in help init list list-tracked pull push version; do
|
|
_vcsh-$func() { _nothing }
|
|
done
|
|
for func in delete enter list-tracked-by upgrade write-gitignore; do
|
|
_vcsh-$func() { (( CURRENT == 2 )) && __vcsh_repositories }
|
|
done
|
|
|
|
function _vcsh-rename () {
|
|
case $CURRENT in
|
|
2) __vcsh_repositories ;;
|
|
3) _message "new repository name" ;;
|
|
*) _nothing ;;
|
|
esac
|
|
}
|
|
|
|
function _vcsh-run () {
|
|
(( CURRENT == 2 )) && __vcsh_repositories
|
|
if (( CURRENT >= 3 )); then
|
|
words=( "${(@)words[3,-1]}" )
|
|
(( CURRENT -= 2 ))
|
|
_complete
|
|
fi
|
|
}
|
|
|
|
function _vcsh () {
|
|
local curcontext="${curcontext}" ret=1
|
|
local state vcshcommand
|
|
local -a args subcommands
|
|
|
|
subcommands=(
|
|
"clone:clone an existing repository"
|
|
"delete:delete an existing repository"
|
|
"enter:enter repository; spawn new <\$SHELL>"
|
|
"help:display help"
|
|
"init:initialize an empty repository"
|
|
"list:list all local vcsh repositories"
|
|
"list-tracked:list all files tracked by vcsh"
|
|
"list-tracked-by:list files tracked by a repository"
|
|
"pull:pull from all vcsh remotes"
|
|
"rename:rename a repository"
|
|
"run:run command with <\$GIT_DIR> and <\$GIT_WORK_TREE> set"
|
|
"upgrade:upgrade repository to currently recommended settings"
|
|
"version:print version information"
|
|
"which:find <substring> in name of any tracked file"
|
|
"write-gitignore:write .gitignore.d/<repo> via git ls-files"
|
|
)
|
|
|
|
args=(
|
|
'-c[source <file> prior to other configuration files]:config files:_path_files'
|
|
'-d[enable debug mode]'
|
|
'-v[enable verbose mode]'
|
|
'*:: :->subcommand_or_options_or_repo'
|
|
)
|
|
|
|
_arguments -C ${args} && ret=0
|
|
|
|
if [[ ${state} == "subcommand_or_options_or_repo" ]]; then
|
|
if (( CURRENT == 1 )); then
|
|
_describe -t subcommands 'vcsh sub-commands' subcommands && ret=0
|
|
__vcsh_repositories && ret=0
|
|
else
|
|
vcshcommand="${words[1]}"
|
|
if ! (( ${+functions[_vcsh-$vcshcommand]} )); then
|
|
# There is no handler function, so this is probably the name
|
|
# of a repository. Act accordingly.
|
|
_dispatch git git && ret=0
|
|
else
|
|
curcontext="${curcontext%:*:*}:vcsh-${vcshcommand}:"
|
|
_call_function ret _vcsh-${vcshcommand}
|
|
fi
|
|
fi
|
|
fi
|
|
return ret
|
|
}
|
|
|
|
_vcsh "$@"
|