#!/bin/sh
#
# diff output is totaled
#
# Copyright (C) 2001 SystemInfinity Corp.

trap 'exit 1' 1 2 3 15

# echo usage

USAGE="Usage: `basename $0` [-v][--] from-file to-file"

Usage() {
	echo "$USAGE" 1>&2
	exit 1
}

# analyze options
#

VERBOSE=FALSE

while [ $# -gt 0 ]; do

	case $1 in
		-v)
			VERBOSE=TRUE
			shift;;
		--)
			shift; break;;
		-*)
			Usage;;
		*)
			break;;
	esac

done

if [ $# -lt 2 ]; then
	Usage
fi

# check an parameters in diff
#

if [ $VERBOSE = TRUE ]; then
	diff -r "$1" "$2"
else
	diff -r "$1" "$2" >/dev/null
fi

if [ $? -eq 2 ]; then
	exit 1;
fi

# extract "change commands" from "diff output"
#

diff -r "$1" "$2" |
sed -e '/^[^0-9d]/d' \
	-e 's/^diff -r/diff/' \
    -e 's/^\(.\+\) \(.\+\) \(.\+\)/\1,\2,\3/' \
	-e 's/^\([0-9,]\+\)d.*/d,\1/' \
	-e 's/^[0-9,]\+a\(.\+\)/a,\1/'\
	-e 's/^[0-9,]\+c\(.\+\)/c,\1/' |
awk -F, -v file=`basename "$1"` \
		 'BEGIN { 
		 	line="-----------------------------------------------------"
			format="%-20.20s %10s %10s %10s\n"
			first = "true"
			dcnt = 0; acnt = 0; ccnt = 0
			printf(format, "FILE NAME", "DELETE", "ADD", "CORRECT")
			print line
		 }
		 $1 == "d" { dcnt += length($3) > 0 ? $3 - $2 + 1 : 1 }
	 	 $1 == "a" { acnt += length($3) > 0 ? $3 - $2 + 1 : 1 }
	 	 $1 == "c" { ccnt += length($3) > 0 ? $3 - $2 + 1 : 1 }
	 	 $1 == "diff" { 
			if (first == "true")
		 		first = "false"
			else {
				printf(format, name, dcnt, acnt, ccnt)
				t_dcnt += dcnt; t_acnt += acnt; t_ccnt += ccnt
				dcnt = 0; acnt = 0; ccnt = 0
			}
			name = path[split($3, path, /\//)]
		 }
	 	 END {
			printf(format, length(name) > 0 ? name : file, dcnt, acnt, ccnt)
			print line
			t_cnt = t_dcnt + dcnt + t_acnt + acnt + t_ccnt + ccnt
			printf("%-20.20s %10s %10s %10s\n",
					"total("t_cnt")", t_dcnt + dcnt, t_acnt + acnt, t_ccnt + ccnt)
		 }'
