#! /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 "users.$LOGNAME" -l | jq -R -s -c 'split("\n")') } all_push_hosts() { git remote -v \ | sed -n ' s/^\(\S\+\)\s\+git@\([^:]\+\):\(\S\+\) (push)$/{"key":"\1","value":{"host":"\2","repo":"\3"}}/p ' \ | jq -s from_entries } 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