#!/bin/bash

# $Id: editchanges,v 1.3 2004/08/13 15:51:34 mh Exp $
# $Source: /var/local/cvs/zg2/editchanges/editchanges,v $

CHANGELOGDIR="/usr/local/doc/localhost"
CHANGELOG="$CHANGELOGDIR/changelog"
CHANGEWRK="${CHANGELOG}.wrk"
CHANGEHDR="/usr/local/share/zgserver/editchanges.header"

umask 002

if [ -z "$CHANGESEDITOR" ]; then
  if [ -n "$VISUAL" ]; then
    CHANGESEDITOR="$VISUAL"
  elif [ -n "$EDITOR" ]; then
    CHANGESEDITOR="$EDITOR"
  elif [ -x "$(which sensible-editor)" ]; then
    CHANGESEDITOR="$(which sensible-editor)"
  elif [ -x "/usr/bin/vi" ]; then
    CHANGESEDITOR="/usr/bin/vi"
  else
    echo >&2 "ERR: no suitable editor found!"
    exit 1
  fi
fi

if ! [ -w $CHANGELOGDIR ] || ! [ -e $CHANGELOG ]; then
  echo >&2 "ERR: changelog not writeable"
  exit 1
fi

if [ -n "$SUDO_USER" ]; then
  echo >&2 "ERR: don't call $0 with sudo!"
  exit 1
fi

if [ -e $CHANGEWRK ]; then
  echo >&2 "ERR: Work file exists, another edit in progress?"
  exit 1
fi

cat /etc/motd > $CHANGEWRK
if [ -e "$CHANGEHDR" ]; then
  cat /usr/local/share/zgserver/editchanges.header >> $CHANGEWRK
fi
echo >> $CHANGEWRK "----#### Begin Changelog ####----"
echo >> $CHANGEWRK
echo >> $CHANGEWRK "$(date "+%Y-%m-%d %H:%M:%S") /$USER"
echo >> $CHANGEWRK

LINENUM=$(cat $CHANGEWRK | wc -l)

< $CHANGELOG sed -ne '/^----#### Begin Changelog ####----$/,${/^----#### Begin Changelog ####----$/d;p;}' >> $CHANGEWRK

MD5="$(md5sum $CHANGEWRK)"
echo $LINENUM

case "`basename $CHANGESEDITOR`" in
	vi|vim) PARM="-c $LINENUM $CHANGEWRK";;
	jed)    PARM="$CHANGEWRK -g $LINENUM";;
	*)	PARM="$CHANGEWRK"
esac

echo "now invoking $CHANGESEDITOR $PARM"
$CHANGESEDITOR $PARM


if [ "$MD5" == "$(md5sum $CHANGEWRK)" ]; then
	echo "no changes"
else
	logger -p user.notice -t "editchanges" "changelog modification by $USER"
	diff -U0 $CHANGELOG $CHANGEWRK | tail -n +3 | logger -p user.notice -t "editchanges"
	mv $CHANGEWRK $CHANGELOG
fi

rm -f ${CHANGEWRK} ${CHANGEWRK}~
