HaRe-0.6: tools/scripts/syncanoncvs
#!/bin/sh
### The purpose of this script is to update the copy of the Programatica
### CVS repository on the anonymous CVS server on glass.cse.ogi.edu.
RSYNC_RSH=ssh; export RSYNC_RSH
## Where the anonymous CVS repository mirror is located:
#anoncvshost=glass.cse.ogi.edu
anoncvshost=cvs.haskell.org
#anoncvsdir=/home/cvs/anon/cvs/programatica
anoncvsdir=/home/cvs/root/programatica
todir=$anoncvshost:$anoncvsdir
## Where the source CVS repository is located:
cvsdir=/projects/pacsoft/cvs/programatica
subdirs="tools hOp" # only copy this subdirectories
fromdirs="$cvsdir/tools $cvsdir/hOp"
exclude="--exclude=hOp/kernel/L4"
tmpdir=/tmp/programatica-cvs-tmp-copy
[ -d $tmpdir ] || mkdir -m go-rwx $tmpdir || exit 1
before=$tmpdir/before
after=$tmpdir/after
locks=$tmpdir/locks
### First try to make a consistent copy of the CVS repository:
find $fromdirs -ls >$after || exit 1
until
mv $after $before &&
rsync -a --delete --delete-excluded $exclude $fromdirs $tmpdir &&
find $fromdirs -ls >$after || exit 1
find $tmpdir -name '#cvs.*' >$locks || exit 1
! [ -s $locks ] && cmp $before $after
do
[ -s $locks ] && echo "Found some lock files."
cmp -s $before $after || echo "Repository changed during copy."
echo "Trying again."
sleep 10
done
### Assume we now have a consistent copy of the repository.
### Go ahead and upload it.
(cd $tmpdir && rsync -av --delete $subdirs $todir)