#!/bin/bash cd /media/stuff/src || exit 1 lockf=/tmp/.uprepo.lock lockfile -60 -l 36000 -r 20 $lockf || exit 1 TL=$((20*60)) running() { kill -0 $* &> /dev/null } tl() { local max=$(($1+SECONDS)) shift exec "$@" & while running $! &> /dev/null && [ $max -ge $SECONDS ]; do sleep 1; done if running $!; then kill $! &> /dev/null sleep 1 kill -9 $! &> /dev/null fi } trap "rm -f $lockf" EXIT shopt -s dotglob for i in *.git */*.git; do [ -h "$i" ] && continue [ -d "$i" ] || continue d="${i%/.git}" echo $d if [ "$d" = "$i" ]; then (cd "$d" && tl $TL git fetch) 2>&1 | nocr elif [ -d "$i/svn" ]; then (cd "$d" && tl $TL git svn fetch) 2>&1 | nocr elif [ -e "$d/.cvsurl" ]; then (cd "$d" && tl $TL git cvsimport $(<.cvsurl)) 2>&1 | nocr elif [ -e "$d/.svnurl" ]; then (cd "$d" && tl $TL git svnimport -r $(<.svnurl)) 2>&1 | nocr else (cd "$d" && tl $TL git pull) 2>&1 | nocr fi done for i in */*.hg */*/*.hg; do [ -h "$i" ] && continue [ -d "$i" ] || continue d="${i%/.hg}" echo $d (cd "$d" && tl $TL hg pull) done for i in */*_darcs; do [ -h "$i" ] && continue [ -d "$i" ] || continue d="${i%/_darcs}" echo $d (cd "$d" && tl $TL darcs pull -aq) done for i in */.svn; do [ -h "$i" ] && continue [ -d "$i" ] || continue d="${i%/.svn}" echo $d (cd "$d" && tl $TL svn up -q) done for i in */CVS; do [ -h "$i" ] && continue [ -d "$i" ] || continue d="${i%/CVS}" echo $d (cd "$d" && tl $TL cvs -Q -z3 up -P) done