#!/bin/sh
# Revert the argument if its changes comprise only the generation metadata
# such as date generated, VMMaker version, etc.

TEST=
if [ "$1" = "-t" -o \( "$1" = "-T" \) ]; then
	TEST=$1
	shift
fi
for f in "$@"; do
	if [ -d "$f" ]; then
		$0 $TEST `git status --porcelain -- "$f" | grep "^\s*M" | sed 's/^\s*M *//'`
	else
		case `git status --porcelain -- "$f"` in
		*M*)	;;
		*)	continue
		esac
		RESULT="`git diff -w -- "$f" | grep '^[+-]' | egrep -vi ' VMMaker[-.][a-z][a-z-]*\.[0-9][0-9]* uuid:|\([* ]*Compiler[-.][a-z][a-z-]*\.[0-9][0-9]*| Cog[-.][a-z][a-z]*\.[0-9][0-9]* uuid:| 3DICC-Plugins[-.][a-z][a-z]*\.[0-9][0-9]* uuid:| CryptographyPlugins[a-z.-][a-z.-]*\.[0-9][0-9]* | VMMaker[-.][a-z][a-z-]*\.[0-9][0-9]*[ "]|static const char \*moduleName.*" INT_EXT;| Cog[-.][a-z][a-z-]*\.[0-9][0-9]* | Qwaq-Plugins[-.][a-z][a-z]*\.[0-9][0-9]* | VMConstruction-Plugins-OSProcessPlugin[a-z.-][a-z.-]*\.[0-9][0-9]* | Sound[-.][a-z][a-z]*\.[0-9][0-9]* uuid:|^[+-]const char \*interpreterVersion = |^\-\-\-|^\+\+\+|^[+-]$'`"
		if [ -z "$TEST" ]; then
			test -z "$RESULT" && (echo reverting "$f"; git checkout -- "$f")
		elif [ "$TEST" = "-T" ]; then
			test -z "$RESULT" && echo $f essentially unchanged || echo $f changed
		else
			echo "testing; no output implies this would be reverted"
			git diff -w -- "$f" | grep '^[+-]' | egrep -vi ' VMMaker[-.][a-z][a-z-]*\.[0-9][0-9]* uuid:|\([* ]*Compiler[-.][a-z][a-z-]*\.[0-9][0-9]| Cog[-.][a-z][a-z]*\.[0-9][0-9]* uuid:| 3DICC-Plugins[-.][a-z][a-z]*\.[0-9][0-9]* uuid:| CryptographyPlugins[a-z.-][a-z.-]*\.[0-9][0-9]* | VMMaker[-.][a-z][a-z-]*\.[0-9][0-9]*[ "]|static const char \*moduleName.*" INT_EXT;| Cog[-.][a-z][a-z-]*\.[0-9][0-9]* | Qwaq-Plugins[-.][a-z][a-z]*\.[0-9][0-9]* | VMConstruction-Plugins-OSProcessPlugin[a-z.-][a-z.-]*\.[0-9][0-9]* | Sound[-.][a-z][a-z]*\.[0-9][0-9]* uuid:|^[+-]const char \*interpreterVersion =|^\-\-\-|^\+\+\+|^[+-]$'
		fi
	fi
done
