#!/bin/sh log() { echo $@ } err() { log $@ } fatal() { err $@ exit 1 } marker() { log "# ============= $@" } config() { pdir=`pwd` while [ `basename $pdir` != proj ]; do [ "$pdir" = / ] && fatal "didn't find \"proj\" in directory components" pdir=`dirname $pdir` done pdirs=`(cd $pdir; ls -d */.git | sed 's%/.git%%')` } # ------------- commands clone() {( local p config cd $pdir local id=$PGIT_CLONE_FROM_USER local projects="$PGIT_CLONE_PROJECTS" [ "$id" ] || id=`whoami` [ "$projects" ] || projects=`ssh git.jannet.de /opt/ytools/bin/git-srv-admin.sh -j list-personal-projects` for p in $projects; do [ -d $p ] && { marker "skipping existing $p" continue } marker "cloning $p" git clone ssh://$id@git.jannet.de/srv/git/$id/proj/$p done )} pull() {( local d config cd $pdir for d in $pdirs; do marker "$d" (cd $d; git pull "$@") done )} branch() {( local d config cd $pdir for d in $pdirs; do marker "$d" (cd $d; git branch "$@") done )} diff() {( local d config cd $pdir for d in $pdirs; do marker $d (cd $d; git diff --src-prefix=a/$d/ --dst-prefix=b/$d/ "$@") done )} commit() {( local d config cd $pdir for d in $pdirs; do marker $d (cd $d; git commit "$@") done )} push() {( local d config cd $pdir for d in $pdirs; do marker $d (cd $d; git push "$@") done )} cmd=$1 shift $cmd "$@"