X-Git-Url: https://git.madduck.net/code/vcsh.git/blobdiff_plain/ff2d978a53d66ee2e28df89f6d67bfa365fd80af..44edd6d7ed904bde1cf07aa54f201f437f5e380b:/_vcsh?ds=sidebyside

diff --git a/_vcsh b/_vcsh
index 26ee9b9..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,11 +40,19 @@ function _vcsh-list () {
 }
 
 function _vcsh-list-tracked () {
+	(( CURRENT == 2 )) && __vcsh_repositories
+}
+
+function _vcsh-list-untracked () {
 	_nothing
 }
 
-function _vcsh-list-tracked-by () {
-	(( CURRENT == 2 )) && __vcsh_repositories
+function _vcsh-pull () {
+	_nothing
+}
+
+function _vcsh-push () {
+	_nothing
 }
 
 function _vcsh-rename () {
@@ -58,7 +70,11 @@ function _vcsh-run () {
 	fi
 }
 
-function _vcsh-setup () {
+function _vcsh-status () {
+	(( CURRENT == 2 )) && __vcsh_repositories
+}
+
+function _vcsh-upgrade () {
 	(( CURRENT == 2 )) && __vcsh_repositories
 }
 
@@ -79,18 +95,26 @@ 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"
 		"rename:rename a repository"
 		"run:run command with <\$GIT_DIR> and <\$GIT_WORK_TREE> set"
-		"setup:set up repository with recommended settings"
+		"status:show statuses of all/one vcsh repositories"
+		"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"
@@ -114,11 +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.
-				_message "git sub-command"
-				#TODO and now we need to complete on git subcommands
+				# 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