summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xpush36
1 files changed, 36 insertions, 0 deletions
diff --git a/push b/push
new file mode 100755
index 0000000..8a8d859
--- /dev/null
+++ b/push
@@ -0,0 +1,36 @@
+#! /bin/sh
+# NAME
+# push - Push master to all your repositores
+#
+# SYNOPSIS
+# push
+#
+# ENVIRONMENT VARIABLES
+# LOGNAME Specifies who you are.
+#
+# STOCKHOLM Specifies where stockholm can be found.
+# (Default: ~/stockholm)
+#
+set -efu
+
+STOCKHOLM=${STOCKHOLM-$HOME/stockholm}
+
+my_hosts() {
+ (cd "$STOCKHOLM" && get "$LOGNAME" -l | jq -R -s -c 'split("\n")')
+}
+
+all_push_hosts() {
+ echo '{'
+ git remote -v \
+ | sed -n 's/^\(\S\+\)\s\+git@\([^:]\+\):\(\S\+\) (push)$/"\1":{"host":"\2","repo":"\3"}/;T;$!s/$/,/;p'
+ echo '}'
+}
+
+my_push_hosts() {
+ my_hosts \
+ | jq -r --argjson all_push_hosts "$(all_push_hosts)" \
+ 'map(. as $host | select( $all_push_hosts | has($host)))[]'
+}
+
+my_push_hosts \
+ | parallel -j0 --no-notice --line-buffer --tag-string {} git push {} master