#!/bin/sh
cache="$1"
shift
temp="$(mktemp --tmpdir "$(printf '%s' "$cache" | tr --complement '[:alnum:]_.' _ )".tmp.XXXXXXXXXXXXXX)"
"$@" > "$temp" 2>&1
ret=$?
if [ $ret -ne 0 ] ; then
	if [ -s "$temp" ] ; then
		echo "Error $ret: ran $*"
		cat "$temp"
	fi
	rm --force "$temp"
	exit $?
fi
if test ! -s "$temp" ; then
	rm --force "$temp"
	exit 0
fi
diff $diffargs --unified "$cache" "$temp"
ret=$?
if [ $ret -eq 0 ] ; then
	rm --force "$temp"
elif [ $ret -eq 1 ] ; then
	mv --force "$temp" "$cache"
else
	echo "There was an error! diff $diffargs --unified $temp $cache => $ret"
	exit 1
fi
