From 1d8970fdb8d4adbfd5cdecc5d15da9db61efb39d Mon Sep 17 00:00:00 2001
From: Richard Hartmann <richih.mailinglist@gmail.com>
Date: Fri, 5 Jul 2013 22:13:33 +0200
Subject: [PATCH] Add support for `vcsh push`

This pushes to the respective remotes of all vcsh repos.
---
 _vcsh           |  4 ++++
 doc/vcsh.1.ronn |  5 +++++
 vcsh            | 15 ++++++++++++++-
 3 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/_vcsh b/_vcsh
index c77f2af..47dbd9e 100644
--- a/_vcsh
+++ b/_vcsh
@@ -47,6 +47,10 @@ function _vcsh-pull () {
 	_nothing
 }
 
+function _vcsh-push () {
+	_nothing
+}
+
 function _vcsh-rename () {
 	(( CURRENT == 2 )) && __vcsh_repositories
 	(( CURRENT == 3 )) && _message "new repository name"
diff --git a/doc/vcsh.1.ronn b/doc/vcsh.1.ronn
index 1592d07..ee13b7f 100644
--- a/doc/vcsh.1.ronn
+++ b/doc/vcsh.1.ronn
@@ -23,6 +23,8 @@ vcsh(1) - Version Control System for $HOME - multiple Git repositories in $HOME
 
 `vcsh` pull
 
+`vcsh` push
+
 `vcsh` rename <repo> <newname>
 
 `vcsh` run <repo> <shell command>
@@ -103,6 +105,9 @@ an interactive user.
 * pull:
   Pull from all vcsh remotes.
 
+* push:
+  Push to all vcsh remotes.
+
 * rename:
   Rename a repository.
 
diff --git a/vcsh b/vcsh
index e6b9377..159feda 100755
--- a/vcsh
+++ b/vcsh
@@ -101,6 +101,7 @@ help() {
    list-tracked-by \\
         <repo>          List files tracked by a repository
    pull                 Pull from all vcsh remotes
+   push                 Push to vcsh remotes
    rename <repo> \\
           <newname>     Rename repository
    run <repo> \\
@@ -234,6 +235,17 @@ pull() {
 	hook post-pull
 }
 
+push() {
+	hook pre-push
+	for VCSH_REPO_NAME in $(list); do
+		echo -n "$VCSH_REPO_NAME: "
+		export GIT_DIR="$VCSH_REPO_D/$VCSH_REPO_NAME.git"
+		use
+		git push
+	done
+	hook post-push
+}
+
 rename() {
 	git_dir_exists
 	[ -d "$GIT_DIR_NEW" ] && fatal "'$GIT_DIR_NEW' exists" 54
@@ -341,7 +353,8 @@ elif [ "$1" = 'delete' ]           ||
 	[ "$VCSH_COMMAND" = 'write-gitignore' ]
 elif [ "$1" = 'list' ] ||
      [ "$1" = 'list-tracked' ] ||
-     [ "$1" = 'pull' ]; then
+     [ "$1" = 'pull' ] ||
+     [ "$1" = 'push' ]; then
 	export VCSH_COMMAND="$1"
 elif [ -n "$2" ]; then
 	export VCSH_COMMAND='run'
-- 
GitLab