#!/bin/bash

# A hook script that checks if files staged for commit have updated Arm copyright year.
# In case they are not - updates the years and prompts user to add them to the change.
# This hook is called on "git commit" after changes have been staged, but before commit
# message has to be provided.

RED="\033[00;31m"
YELLOW="\033[00;33m"
BLANK="\033[00;00m"

FILES=`git diff --cached --name-only HEAD`
YEAR_NOW=`date +"%Y"`

YEAR_RGX="[0-9][0-9][0-9][0-9]"
ARM_RGX="\(ARM\|Arm\|arm\)"

exit_code=0

PLATPROV=
ORG=`echo "$GIT_AUTHOR_EMAIL" | awk -F '[@]' '{ print $2;}'`

case $ORG in
	amd.com)
		PLATPROV="Advanced Micro Devices, Inc. All rights reserved."
		;;
	*arm.com)
		PLATPROV="$ARM_RGX"
		;;
	*)
		;;
esac

function user_warning() {
	echo -e "Copyright of $RED$FILE$BLANK is out of date/incorrect"
	echo -e "Updated copyright to"
	grep -nr "opyright.*$YEAR_RGX.*$PLATPROV" "$FILE"
	echo
}

while read -r FILE; do
	if [ -z "$FILE" ]
	then
		break
	fi

	# Check if copyright header exists for the org
	if ! grep "opyright.*$YEAR_RGX.*$PLATPROV" "$FILE">/dev/null 2>&1 && [[ $ORG != *arm* ]]
	then
		echo -e "Copyright header ""$RED""$PLATPROV""$BLANK"" is missing in ""$YELLOW""$FILE""$BLANK"
	fi

	# Check if the copyright year is updated for the org  and update it
	if [ ! -z "$PLATPROV" ]
	then
		if ! grep "opyright.*$YEAR_NOW.*$PLATPROV" "$FILE">/dev/null 2>&1
		then
			# If it is "from_date - to_date" type of entry - change to_date entry.
			if grep "opyright.*$YEAR_RGX.*-.*$YEAR_RGX.*$PLATPROV" "$FILE" >/dev/null 2>&1
			then
				exit_code=1
				sed -i "s/\(opyright.*\)$YEAR_RGX\(.*$PLATPROV\)/\1$(date +"%Y")\2/" $FILE
				user_warning
			# If it is single "date" type of entry - add the copyright extension to current year.
			elif grep "opyright.*$YEAR_RGX.*$PLATPROV" "$FILE" >/dev/null 2>&1
			then
				exit_code=1
				sed -i "s/\(opyright.*$YEAR_RGX\)\(.*$PLATPROV\)/\1-$(date +"%Y")\2/" $FILE
				user_warning
			fi

			# Even if the year is correct - verify that Arm copyright is formatted correctly.
			if [[ $ORG == *arm* ]]
			then
				if grep "opyright.*\(ARM\|arm\)" "$FILE">/dev/null 2>&1
				then
					exit_code=1
					sed -i "s/\(opyright.*\)\(ARM\|arm\)/\1Arm/" $FILE
					user_warning
				fi
			fi
		fi
	fi

done <<< "$FILES"

if [ $exit_code -eq 1 ]
then
	echo -e "$RED""Please stage updated files$BLANK before commiting or use$YELLOW git commit --no-verify$BLANK to skip copyright check"
fi
exit $exit_code
