#!/bin/bash

# Directory
prefix=/usr
datarootdir=${prefix}/share
datadir=/usr/share

# Enable NLS
export TEXTDOMAIN=proc-rpmnew
export TEXTDOMAINDIR=${datarootdir}/locale

. gettext.sh

# Output menu
output_menu()
{
	echo "`eval_gettext "S) Show difference"`"
	echo "`eval_gettext "E) Edit on diff mode of vim"`"
	echo "`eval_gettext "I) merge Intaractively by sdiff"`"
	echo "`eval_gettext "R) Replace current file by saved file"`"
	echo "`eval_gettext "P) Protect current file and remove saved file"`"
	echo "`eval_gettext "Q) Quit"`"
	echo "`eval_gettext "N) Next file"`"
	echo -n "`eval_gettext "What do you do? > "`"
}

# execute diff
exec_diff()
{
	COLUMNS=$(tput cols)
	HALFCOL=$(expr $COLUMNS / 2 - 2)

	printf "%-${HALFCOL}s%-${HALFCOL}s\n" $dir/$cur $dir/$sav
	echo
	diff --side-by-side -W ${COLUMNS} $dir/$cur $dir/$sav	# --suppress-common-lines 
}

# execute sdiff
exec_sdiff()
{
	MODE=`stat -c "%a" $dir/$cur`
	OWNER=`stat -c "%U" $dir/$cur`
	GROUP=`stat -c "%G" $dir/$cur`

	sdiff -o $dir/$cur.new -w $(tput cols) $dir/$cur $dir/$sav
	mv $dir/$cur.new $dir/$cur
	chmod ${MODE} $dir/$cur
	chown ${OWNER}:${GROUP} $dir/$cur
}

# main loop
for file in `find /etc 2>/dev/null | /bin/grep -E "rpm(new|save)$"`
do
	dir=`dirname $file`
	sav=`basename $file`
	cur=`basename $file .rpmnew`
	if [ $cur = $sav ]
	then
		cur=`basename $file .rpmsave`
	fi
	if [ -e $cur ]
	then
		continue
	fi

	ok=0
	while [ $ok -eq 0 ]
	do
		ctime=`stat -c "%y" $dir/$cur`
		stime=`stat -c "%y" $dir/$sav`
		echo "`eval_gettext "current configuration: \\\$dir/\\\$cur		(\\\$ctime)"`"
		echo "`eval_gettext "saved configuration  : \\\$file	(\\\$stime)"`"
		output_menu

		read command
		echo
		case "$command" in
			s|S)	exec_diff ;;

			e|E)	vim +r$dir/$cur -d $dir/$cur.new $dir/$sav
				mv $dir/$cur.new $dir/$cur ;;

			i|I)	exec_sdiff ;;

			r|R)	mv $dir/$sav $dir/$cur
				ok=1;;

			p|P)	rm $dir/$sav
				ok=1;;

			q|Q)	exit ;;

			n|N)	ok=1;;

			*) 	echo "`eval_gettext "You inputed wrong character."`"
				echo;;
		esac
	done
done
