#!/bin/sh
#
#	Copyright (C) John Cherry <cherry@osdl.org>
#       2004 Open Source Developement Lab
#
# AUTHOR:
#	Original script by John Cherry <cherry@osdl.org>
#
# sparsediff - compare two different sparseregress.sh builds and display
#            new warnings
#
#   usage: sparsediff <file1> <file2>
#          file1 - old build file
#          file2 - new build file
#
#	1.0.0		Original deployment
#
usage () {
	echo $@
	echo "   Usage: sparsediff <dir1> <dir2>"
	exit 0
}

GROCKDIFF="grockdiff"

#
# Make sure command line arguments are reasonable
#

if [ $# != 2 ]; then
	usage "Check number of arguments:"
else
	FILE1=$1
	FILE2=$2
	if [ ! -f $FILE1 ]; then
		usage "$FILE1 is not a valid file."
	fi
	if [ ! -f $FILE2 ]; then
		usage "$FILE2 is not a valid file."
	fi
	FILE1_BASE=`basename $FILE1`
	FILE2_BASE=`basename $FILE2`
fi

#
# Havest all possible log files in both directories
#
WARN1_NUMS=`mktemp tmplog.XXXXXX`
WARN2_NUMS=`mktemp tmplog.XXXXXX`
grep warning: $FILE1 | sort -u > $WARN1_NUMS
grep warning: $FILE2 | sort -u > $WARN2_NUMS

WARN1_NONUMS=`mktemp tmplog.XXXXXX`
WARN2_NONUMS=`mktemp tmplog.XXXXXX`
cat $WARN1_NUMS | sed -e 's/c:[0-9]*/c/' -e 's/h:[0-9]*/h/' > $WARN1_NONUMS
cat $WARN2_NUMS | sed -e 's/c:[0-9]*/c/' -e 's/h:[0-9]*/h/' > $WARN2_NONUMS

WARN_CHANGES=`mktemp tmploga.XXXXXX`
diff $WARN1_NONUMS $WARN2_NONUMS | $GROCKDIFF $WARN1_NUMS $WARN2_NUMS > $WARN_CHANGES

NEW_WARNINGS="new_warnings.$FILE2_BASE"
FIXED_WARNINGS="fixed_warnings.$FILE1_BASE"
grep "^>" $WARN_CHANGES | sed 's/^> //' > $NEW_WARNINGS
grep "^<" $WARN_CHANGES | sed 's/^< //' > $FIXED_WARNINGS
NEW_WARN_CNT=`cat $NEW_WARNINGS | wc -l`
FIXED_WARN_CNT=`cat $FIXED_WARNINGS | wc -l`

printf "\nSummary:\n   New warnings = %d\n" $NEW_WARN_CNT
printf "   Fixed warnings = %d\n\n" $FIXED_WARN_CNT

printf "New warnings:\n-------------\n"
# cat $NEW_WARNINGS
while read WARN_TAG REST_OF_LINE; do
	grep $WARN_TAG $FILE2
	echo
done < $NEW_WARNINGS

printf "\nFixed warnings:\n---------------\n"
# cat $FIXED_WARNINGS
while read WARN_TAG REST_OF_LINE; do
	grep $WARN_TAG $FILE1
	echo
done < $FIXED_WARNINGS
echo

rm $WARN1_NUMS $WARN2_NUMS $WARN1_NONUMS $WARN2_NONUMS $WARN_CHANGES

