#! /bin/sh

# This file dumps a bogofilter to standard output in POSIX-tar format.
#
# Requires: pax
#
# (C) 2004 by Matthias Andree
# GNU GPL v2.

# $Id: bf_tar.in 5957 2005-05-16 11:24:09Z relson $

set -e

REMOVEBEF=0
REMOVEAFT=0
while [ "$1" ] ; do
    case "$1" in
	-r) REMOVEAFT=1 ;;
	-R) REMOVEBEF=1 ;;
	--) shift ; break ;;
	-*) echo >&2 "`basename $0`: unknown option $1" ; exit 1 ;;
	*) break;
    esac
    shift
done

if [ $# -ne 1 ] ; then
    echo >&2 "Usage: `basename $0` [options] bogodir > outfile.tar"
    echo >&2 "   or: `basename $0` [options] bogodir | gzip -c >outfile.tar.gz"
    echo >&2 'Options are:'
    echo >&2 ' -r - remove inactive log files after archiving'
    echo >&2 ' -R - remove inactive log files before archiving (use with caution)'
    exit 1
fi

# we could write $1 for the moment being as we demand exactly this
# argument above [ $# -ne 1 ]
BOGOHOME=${1:-.}

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

nukelogs() {
    bogoutil --db-prune="$BOGOHOME"
}

# remove if requested
if [ $REMOVEBEF -eq 1 ] ; then
    nukelogs
else
    bogoutil --db-checkpoint="$BOGOHOME"
fi

# database first, then the logs.
# the log MUST be newer than the database, if it's the other way around,
# that state will not be recoverable!
#
# pax options: -w: write archive, -v: verbosely, -x ustar: pick tar format.
(
  c="${BOGOHOME}/DB_CONFIG"
  if [ -f "$c" ] ; then echo "$c" ; fi
  bogofilter -QQ -d "$BOGOHOME" | grep '^wordlist ' | cut -f3 -d,
  bogoutil --db-list-logfiles="$BOGOHOME" all
) | pax -w -v -x ustar

# remove if requested
if [ $REMOVEAFT -eq 1 ] ; then nukelogs ; fi
