X-Git-Url: https://git.madduck.net/code/vcsh.git/blobdiff_plain/93b8c205b18a69c4e5ae6b9ebe425c328e23c17b..f7f3bce02a604ca96fe5c239ba351a501a08568d:/_vcsh diff --git a/_vcsh b/_vcsh index 53eaada..1661e19 100644 --- a/_vcsh +++ b/_vcsh @@ -23,6 +23,10 @@ function _vcsh-enter () { (( CURRENT == 2 )) && __vcsh_repositories } +function _vcsh-foreach () { + _dispatch vcsh-foreach git +} + function _vcsh-help () { _nothing } @@ -36,10 +40,6 @@ function _vcsh-list () { } function _vcsh-list-tracked () { - _nothing -} - -function _vcsh-list-tracked-by () { (( CURRENT == 2 )) && __vcsh_repositories } @@ -95,16 +95,19 @@ function _vcsh () { local state vcshcommand local -a args subcommands + local VCSH_REPO_D + : ${VCSH_REPO_D:="${XDG_CONFIG_HOME:-"$HOME/.config"}/vcsh/repo.d"} + subcommands=( "clone:clone an existing repository" "commit:commit in all repositories" "delete:delete an existing repository" "enter:enter repository; spawn new <\$SHELL>" + "foreach:execute for all repos" "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" "list-untracked:list all files not tracked by vcsh" "pull:pull from all vcsh remotes" "push:push to vcsh remotes" @@ -135,10 +138,11 @@ function _vcsh () { if ! (( ${+functions[_vcsh-$vcshcommand]} )); then # There is no handler function, so this is probably the name # of a repository. Act accordingly. - _dispatch git git + # FIXME: this may want to use '_dispatch vcsh git' + GIT_DIR=$VCSH_REPO_D/$words[1].git _dispatch git git else curcontext="${curcontext%:*:*}:vcsh-${vcshcommand}:" - _call_function ret _vcsh-${vcshcommand} + _call_function ret _vcsh-${vcshcommand} && (( ret )) fi fi fi