#!/bin/sh ###################################################################### # Copyright (C) 2006-2007 pmade inc. (Peter Jones pjones@pmade.com) # All Rights Reserved # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # 3. Neither the name of the Author nor the names of its contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A # PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR # OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT # OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. ###################################################################### if [ $# -eq 2 ]; then REPOSITORY=$1 BACKUP=$2 elif [ $# -eq 0 ]; then REPOSITORY=/opt/svn BACKUP=/opt/backup/subversion else echo "Usage: svn-backup.sh [REPOSITORY BACKUP]" exit 1 fi REV_FILE=$BACKUP/rev PATH="/opt/local/bin:$PATH" mkdir -p $BACKUP/full $BACKUP/incremental [ -r $REV_FILE ] && REV1=`head -1 $REV_FILE` [ x$REV1 = x ] && REV1=0 REV2=`svnlook youngest $REPOSITORY` if [ $REV1 -eq 0 -o `date +%u` -eq 7 ]; then FNAME=$BACKUP/full/`date +%Y%m%d`-R$REV2 if [ -r $FNAME ]; then echo "Full svn backup exists" exit else echo "Doing full svn backup" svnadmin dump -q $REPOSITORY > $FNAME bzip2 $FNAME fi elif [ $REV1 != $REV2 ]; then echo "Doing incremental backup" REV1=`expr $REV1 + 1` FNAME=$BACKUP/incremental/$REV1-$REV2 svnadmin -q dump --incremental --revision $REV1:$REV2 $REPOSITORY > $BACKUP/incremental/$REV1-$REV2 bzip2 $FNAME else echo "No backup necessary" exit fi # update the state file echo $REV2 > $REV_FILE # delete backups older than 6 months find $BACKUP/full $BACKUP/incremental -type f -mtime +186 -exec rm {} \;