#!/bin/sh
usage() {
printf >&2 "Usage: %s: snapshot_dir program\n" $(basename "$0")
printf >&2 "Mark directory with a timestamp and run program"
printf >&2 "remove mark when program exits"
exit 2
}
die() {
printf "%s\n" "$*"
exit 1
}
test $# -gt 1 || usage
SNAP_SRC="$1"
: ${SNAP_WRITESRC:=$SNAP_SRC}
export SNAP_SRC SNAP_WRITESRC
shift
test -d "$SNAP_SRC" || die "not a directory: $SNAP_SRC"
test -d "$SNAP_WRITESRC" || die "not a directory: $SNAP_WRITESRC"
LOCKFILE="$SNAP_WRITESRC/.snaprep"
touch "$LOCKFILE" || exit $?
flock -n 0 <"$LOCKFILE" || exit $?
echo $$ >"$LOCKFILE" || exit $?
rm -f "$SNAP_WRITESRC"/.snapshot.[0-9]* 2>/dev/null
mark="$SNAP_WRITESRC/.snapshot.$(date +%s)"
touch "$mark" || exit $?
"$@"
RETCODE=$?
rm -f "$mark" "$LOCKFILE"
exit $RETCODE