#!/bin/sh

#
# See "Selecting a page size" in the Berkeley DB Reference Guide. 
#
pagesize=4096


case $1 in
  "full" | "incremental") echo "Performing $1 backup"
          echo "====== Checkpoint ======"
          db_checkpoint -1 -h db
          echo "====== Retrieve list of old logs ======"
          oldLogs=`db_archive -h db`
          if [ ! -d $1 ]
          then
             mkdir $1
          fi
          if [ $1 = "full" ]
          then
             echo "====== Data backup ======"
             if [ ! -d $1/data ] ; then mkdir $1/data ; fi
             dd if=db/data/IntLongMap of=$1/data/IntLongMap bs=$pagesize
             dd if=db/data/__catalog of=$1/data/__catalog bs=$pagesize
          fi
          echo "====== Log backup ====="
          if [ ! -d $1/logs ] ; then mkdir $1/logs ; fi
          \rm -f db/logs/logs.*
          cd db
          for i in logs/log.*
          do
             dd if=$i of=../$1/$i bs=$pagesize
          done
          cd ..
          echo "===== Remove old logs ====="
          for i in $oldLogs
          do
               \rm db/logs/$i
               echo "db/logs/$i deleted"
          done
          ;;
  *) echo "Usage: $0 [full | incremental]"
     exit 1 ;;
esac
