#!/bin/sh

#  bf_compact source_dir [wordlist_name...]
#
#    use to compact wordlist.db
#    replaces original directory with new one
#    renames original directory with '.old' extension

# $Id: bf_compact,v 1.22 2005/05/08 02:41:04 relson Exp $

set -e # die on errors

if [ -z "$1" ] ; then
    echo usage: bf_compact source_dir \[wordlist_name...\]
    exit 1
fi

# extract home directory
BOGOHOME="$1"
shift

if [ ! -d "$BOGOHOME" ] ; then
    echo $BOGOHOME must be a directory, not a file
    exit 1
fi

# strip trailing slashes
while true; do
    case "$BOGOHOME" in
	*/) BOGOHOME=${BOGOHOME%/} ;;
	*)  break ;;
    esac
done

# find wordlists
if [ -n "$1" ] ; then
    FILES="$@"
else
    FILES=`ls "$BOGOHOME" | grep .db$`
fi

TEMP="bf_compact.$$"

mkdir "$TEMP" || {
    echo "Cannot create directory $TEMP. Abort."
    exit 1
}

# copy Berkeley DB configuration if present
if test -f "$BOGOHOME"/DB_CONFIG ; then
    cp -p "$BOGOHOME"/DB_CONFIG "$TEMP"/
fi

# determine transactions
if test "`find "$BOGOHOME/" -name "log.??????????" -print`" != "" ; then
    TXN=yes
fi

# reload files
for FILE in $FILES ; do
    bogoutil -d "$BOGOHOME"/"$FILE" | bogoutil --db-transaction=no -l $TEMP/"$FILE"
done

if [ -n "$TXN" ] ; then
    #create database environment files
    bogofilter -e -C -d $TEMP --db-transaction=yes < /dev/null
fi

# remove $BOGOHOME.old so we don't move the new backup *into* it
# rather than renaming the backup to it.
rm -rf "$BOGOHOME.old"
mv "$BOGOHOME" "$BOGOHOME.old"
mv  $TEMP      "$BOGOHOME"
