#!/bin/sh
##
## Do ad-hoc backup files
##
## Author: SATOH Fumiyasu @ OSS Technology Co., Japan
## Date: 2006-05-23, since 2005-05-23
##

set -e
set -u
umask 0027
renice 1 "$$" >/dev/null 2>&1

date="`date "+%Y%m%d%H%M"`"
src_list_requested="
    boot
    etc
    var/yp
    var/named/chroot
    var/lib/samba
    var/cache/samba
    var/samba/printer
    var/samba/netlogon
"

usage="Usage: $0 [OPTIONS] DESTDIR

Options
 -v
  Verbose output
 -n
  Dry run
"

flag_verbose=""
flag_norun=""
root="/"
dst_maxnum="30"

while getopts vnr:e: opt; do
    case "$opt" in
    v)
	flag_verbose="yes"
	;;
    n)
	flag_norun="yes"
	;;
    r)
	root="$OPTARG"
	;;
    e)
	dst_maxnum="$OPTARG"
	;;
    *)
	exit 1
	;;
    esac
done
shift `expr $OPTIND - 1`

dst_root="$1"; shift
dst_dir="$dst_root/$date"
dst_dir_prev=""

date_prev="`ls -F "$dst_root" |grep "^[0-9]*/" |sed 's#/$##' |sort -n |tail -n1`"
if [ -n "$date_prev" ]; then
    dst_dir_prev="$dst_root/$date_prev"
fi

cd "$root" || exit 1

src_list=""
for src in $src_list_requested; do
    test -e "$src" && src_list="$src_list $src"
done
if [ -z "$src_list" ]; then
    echo "$0: error: no sources" 1>&2
fi

rsync \
    ${flag_verbose:+--verbose} \
    ${flag_norun:+--dry-run} \
    --archive \
    --hard-links \
    --relative \
    --delete \
    --delete-excluded \
    --exclude ".??*.swp" \
    ${dst_dir_prev:+--link-dest "$dst_dir_prev"} \
    $src_list \
    "$dst_dir"

if [ "$dst_maxnum" -le 0 ]; then
    exit 0
fi
ls -F "$dst_root" \
|grep "^[0-9]*/" \
|sed 's#/$##' \
|sort -nr \
|grep -v "^$date$" \
|tail -n +"$dst_maxnum" \
|while read date; do
    rm -rf "$dst_root/$date"
done

