#!/bin/sh #set -x # Given a list of dirs, for each subdir in those dirs which is a CVS # archive it produces a diff file that is compatible with cvspatch. yesterday_date=`date --date "1 day ago" +"%Y-%m-%d"` date=`date +"%Y-%m-%d"` time="00:00:00" cvsdate="$yesterday_date $time" pwd=`pwd` for dir in $@ do for subdir in `ls $dir` do if [ -d $dir/$subdir/CVS ] then olddiff=`ls -t $pwd/$subdir-*.diff.gz | head -1` oldrevisions=`ls -t $pwd/$subdir-*.revisions.gz | head -1` diff=$pwd/$subdir-$date.diff.gz revisions=$pwd/$subdir-$date.revisions.gz # If there is no backup, make one if [ z"$olddiff" == z ] ; then echo "No backup for $dir/$subdir, making one" (cd $dir/$subdir; cvs diff -u -N . 2> /dev/null | gzip -9 > $diff) (cd $dir/$subdir; find . -path '*CVS*' -name Entries \ -exec backuprevisions '{}' ';' | gzip -9 > $revisions) # If there are changes in the directory since the backup, # make a new backup. elif [ x"`find $dir/$subdir/* -newer $olddiff`" != x ] ; then echo "Changes in $dir/$subdir, making new backup" (cd $dir/$subdir; cvs -f diff -u -N . 2> /dev/null | gzip -9 > $diff) (cd $dir/$subdir; find . -path '*CVS*' -name Entries \ -exec backuprevisions '{}' ';' | gzip -9 > $revisions) else touch $olddiff touch $oldrevisions fi fi done done # delete all the backups over 7 days old find . -name "*.diff.gz" -mtime +7 -exec rm '{}' ';' find . -name "*.revisions.gz" -mtime +7 -exec rm '{}' ';'