#! /bin/bash

set -e

usage() {
    [ $1 -eq 0 ] || exec >&2
    cat <<EOF
USAGE: ${0##*/} [-la] [job] ...
EOF
    exit $1
}

options=`getopt -o lafh --long list,all,force,help -- "$@"` || usage 1
eval set -- "$options"

opt_all=
opt_list=

while :; do
    case "$1" in
    -l|--list)
	opt_list=1
	;;
    -a|--all)
	opt_all=1
	;;
    -f|--force)
	opt_force=1
	;;
    -h|--help)
	usage 0
	;;
    --)
	shift
	break
	;;
    esac
    shift
done

cd "/var/lib/drbd-test"

if [ -n "$opt_all" -o -n "$opt_list" ]; then
    [ $# -eq 0 ] || usage 1
    set -- $(find {transient,persistent} -mindepth 1 -maxdepth 1 -type d -printf '%P\n' | sort -u)
    if [ -n "$opt_list" ]; then
	printf "%s\n" "$@"
	exit
    elif [ $# -gt 0 ]; then
	echo "Cleaning up jobs: $*"
    else
	echo "No jobs found to clean up"
    fi
elif [ $# -eq 0 ]; then
    [ -n "$DRBD_TEST_JOB" ] || usage 1
    set -- "$DRBD_TEST_JOB"
fi

shopt -s nullglob

status=
for job in "$@"; do
    job_status=
    for cleanup in $(printf '%s\n' {transient,persistent}/$job/cleanup-* \
		     | sort -u -t/ -k3 --version-sort -r); do
	if "$cleanup"; then
	    rm -f "$cleanup"
        else
	    job_status=1
	fi
    done
    if [ -z "$job_status" -o "$opt_force" ]; then
	rm -rf $job {transient,persistent}/$job || status=$?
    else
	status=$job_status
    fi
done
exit $status
