#! /bin/sh
# unsavelog - unsave a log file (undo savelog)
# common location
export PATH=$PATH:/sbin:/bin:/usr/sbin:/usr/bin
UNCOMPRESS="gzip -df"
DOT_Z=".gz"

# parse args
exitcode=0	# no problems to far
prog=`basename $0`
preserve=
count=7

usage()
{
    echo "Usage: $prog [-c cycle][-l] file ..."
}

while getopts c:lh opt ; do
	case "$opt" in
	c) count="$OPTARG" ;;
	l) UNCOMPRESS="" ;;
	h) usage; exit 0 ;;
	*) usage; exit 1 ;;
	esac
done

shift $(($OPTIND - 1))

if [ "$count" -lt 2 ]; then
	echo "$prog: count must be at least 2" 1>&2
	exit 2
fi

# cycle thru filenames
while [ $# -gt 0 ]; do

	# get the filename
	filename="$1"
	shift

	# catch bogus files
	if [ -e "$filename" -a ! -f "$filename" ]; then
		echo "$prog: $filename is not a regular file" 1>&2
		exitcode=3
		continue
	fi

 	# be sure that the savedir exists and is writable
	# (in the Debian version, $savedir is . and not ./OLD)
 	savedir=`dirname "$filename"`
 	if [ -z "$savedir" ]; then
 		savedir=.
 	fi
 	if [ ! -d "$savedir" ]; then
 		mkdir "$savedir"
 		if [ "$?" -ne 0 ]; then
 			echo "$prog: could not mkdir $savedir" 1>&2
 			exitcode=5
 			continue
 		fi
 		chmod 0755 "$savedir"
 	fi
 	if [ ! -w "$savedir" ]; then
 		echo "$prog: directory $savedir is not writable" 1>&2
 		exitcode=7
 		continue
 	fi
 
	# determine our uncompressed file names
	newname=`basename "$filename"`
	newname="$savedir/$newname"

	# undo the file.0 holding place
	[ -f "$newname.0" ] && mv -f "$newname.0" "$filename"

	# uncompress the old compressed log if needed
	if [ -n "$UNCOMPRESS" -a -f "$newname.1$DOT_Z" ]; then
		$UNCOMPRESS "$newname.1$DOT_Z"
	fi
	if [ -f "$newname.1" ]; then
		mv -f "$newname.1" "$newname.0"
	fi

	# cycle the old compressed log files
	cycle=1
	while [ $cycle -le $(( $count - 2 )) ]; do
		oldcycle=$cycle
		cycle=$(( $cycle + 1 ))
		if [ -f "$newname.$cycle$DOT_Z" ]; then
			mv -f "$newname.$cycle$DOT_Z" \
			    "$newname.$oldcycle$DOT_Z"
		fi
		if [ -f "$newname.$cycle" ]; then
			mv -f "$newname.$cycle" "$newname.$oldcycle"
		fi
	done

	# report successful rotation
	echo "Rotated \`$filename' at `date`."
done
exit $exitcode
