#!/bin/sh -e # Automatically make snapshot tarballs of CVS modules. # Adam Sampson # This needs to set CVSROOT, MODULES, OUTDIR and MAXSNAPSHOTS, and define a # postcmd function. . ~/.mksnapshotsrc temp=/tmp/mksnapshots.$$ date=`date '+%Y%m%d'` mkdir -p $temp cd $temp for module in $MODULES ; do moddir=$OUTDIR/$module mkdir -p $moddir # Check out current tree cvs -Q -d $CVSROOT checkout $module (cd $module && cvs2cl -g "-Q" -f mksnapshots-ChangeLog) mv -f $module/mksnapshots-ChangeLog ChangeLog find $module -name CVS | xargs rm -rf name=$module-CVS-$date.tar.bz2 # Extract last snapshot last=`ls $moddir | grep -v '(CVS-latest|ChangeLog)' | sort | tail -n1` mkdir last if [ "$last" != "" ] ; then bunzip2 <$moddir/$last | tar -C last -xf - fi # Compare the two and make a new snapshot if different if diff -Nuqr $module last/$module >/dev/null ; then : else tar -cf - $module | bzip2 -9 >$moddir/$name cp ChangeLog $moddir/ChangeLog ln -sf $name $moddir/$module-CVS-latest.tar.bz2 echo "New snapshot: $name" fi # Remove old snapshots past $MAXSNAPSHOTS find $moddir -type f -name '*.tar.bz2' | sort | head --lines=-$MAXSNAPSHOTS | xargs rm -f rm -rf $module last ChangeLog done rmdir $temp cd / postcmd