#!/bin/bash log() { echo $@ } fatal() { log $@ exit 1 } goodbye() { rm -f $cvs_status } local_cvs_proj=`ls -d */CVS 2>/dev/null | sed 's%/[^/]*%%'` local_git_proj=`ls -d */.git 2>/dev/null | sed 's%/[^/]*%%'` remote_cvs_proj=`ssh cvs.jannet.de find /home/jannet/arc/cvs/proj -type d -maxdepth 1 -mindepth 1 | sed 's%.*/%%'` remote_git_proj=`ssh git.jannet.de git-srv-admin.sh -j list-personal-projects` date=`date +'%Y%m%d'` myname=`basename $0` trap goodbye EXIT INT QUIT KILL cvs_status=`mktemp /tmp/$myname""_XXXXXX` for p in $local_cvs_proj; do [ -L $p ] && continue [ -d $p ] || continue echo $remote_cvs_proj | grep -q "\(^\| \)$p\($\| \)" && continue n=old/cvs/$date/$p mkdir -p `dirname $n` echo moving stale cvs project $p to $n mv $p $n purged="$purged $p" done [ -d old ] && mv old purged [ "$purged" ] && { cp -p CVS/Entries CVS/Entries-$date-`date +'%H%M%S'` } for p in $purged; do sed -i "/D\/$p\/\/\/\// d" CVS/Entries done for p in $local_git_proj; do [ -L $p ] && continue [ -d $p ] || continue echo $remote_git_proj | grep -q "\(^\| \)$p\($\| \)" && continue cvs status $p > $cvs_status 2>&1 if [ $? != 0 ]; then cat $cvs_status fatal "\n======== cvs status failed in project $p, giving up." fi grep -qi "project $p has locally modified" $cvs_status && \ fatal "cvs copy has locally modified files, giving up" n=purged/git/$date/$p mkdir -p `dirname $n` mv $p $n log "moving stale CVS project \"$p\" to \"$n\"" done