1cf9346cbSMaksims Svecovs#!/bin/bash 2cf9346cbSMaksims Svecovs 3cf9346cbSMaksims Svecovs# A hook script that checks if files staged for commit have updated Arm copyright year. 4cf9346cbSMaksims Svecovs# In case they are not - updates the years and prompts user to add them to the change. 5cf9346cbSMaksims Svecovs# This hook is called on "git commit" after changes have been staged, but before commit 6cf9346cbSMaksims Svecovs# message has to be provided. 7cf9346cbSMaksims Svecovs 8cf9346cbSMaksims SvecovsRED="\033[00;31m" 9cf9346cbSMaksims SvecovsYELLOW="\033[00;33m" 10cf9346cbSMaksims SvecovsBLANK="\033[00;00m" 11cf9346cbSMaksims Svecovs 12cf9346cbSMaksims SvecovsFILES=`git diff --cached --name-only HEAD` 13cf9346cbSMaksims SvecovsYEAR_NOW=`date +"%Y"` 14cf9346cbSMaksims Svecovs 15cf9346cbSMaksims SvecovsYEAR_RGX="[0-9][0-9][0-9][0-9]" 16cf9346cbSMaksims SvecovsARM_RGX="\(ARM\|Arm\|arm\)" 17cf9346cbSMaksims Svecovs 18cf9346cbSMaksims Svecovsexit_code=0 19cf9346cbSMaksims Svecovs 20cf9346cbSMaksims Svecovsfunction user_warning() { 21*6bb49c87SMaksims Svecovs echo -e "Copyright of $RED$FILE$BLANK is out of date/incorrect" 22cf9346cbSMaksims Svecovs echo -e "Updated copyright to" 23cf9346cbSMaksims Svecovs grep -nr "opyright.*$YEAR_RGX.*$ARM_RGX" "$FILE" 24cf9346cbSMaksims Svecovs echo 25cf9346cbSMaksims Svecovs} 26cf9346cbSMaksims Svecovs 27cf9346cbSMaksims Svecovswhile read -r FILE; do 28cf9346cbSMaksims Svecovs if [ -z "$FILE" ] 29cf9346cbSMaksims Svecovs then 30cf9346cbSMaksims Svecovs break 31cf9346cbSMaksims Svecovs fi 32cf9346cbSMaksims Svecovs # Check if correct copyright notice is in file. 33cf9346cbSMaksims Svecovs # To reduce false positives, we assume files with no 34cf9346cbSMaksims Svecovs # copyright notice do not require it. 35cf9346cbSMaksims Svecovs if ! grep "opyright.*$YEAR_NOW.*$ARM_RGX" "$FILE">/dev/null 2>&1 36cf9346cbSMaksims Svecovs then 37cf9346cbSMaksims Svecovs # If it is "from_date - to_date" type of entry - change to_date entry. 38cf9346cbSMaksims Svecovs if grep "opyright.*$YEAR_RGX.*-.*$YEAR_RGX.*$ARM_RGX" "$FILE" >/dev/null 2>&1 39cf9346cbSMaksims Svecovs then 40cf9346cbSMaksims Svecovs exit_code=1 41*6bb49c87SMaksims Svecovs sed -i "s/\(opyright.*\)$YEAR_RGX\(.*$ARM_RGX\)/\1$(date +"%Y"), Arm/" $FILE 42cf9346cbSMaksims Svecovs user_warning 43cf9346cbSMaksims Svecovs # If it is single "date" type of entry - add the copyright extension to current year. 44cf9346cbSMaksims Svecovs elif grep "opyright.*$YEAR_RGX.*$ARM_RGX" "$FILE" >/dev/null 2>&1 45cf9346cbSMaksims Svecovs then 46cf9346cbSMaksims Svecovs exit_code=1 47*6bb49c87SMaksims Svecovs sed -i "s/\(opyright.*$YEAR_RGX\)\(.*$ARM_RGX\)/\1-$(date +"%Y"), Arm/" $FILE 48cf9346cbSMaksims Svecovs user_warning 49cf9346cbSMaksims Svecovs fi 50*6bb49c87SMaksims Svecovs # Even if the year is correct - verify that Arm copyright is formatted correctly. 51*6bb49c87SMaksims Svecovs elif grep "opyright.*\(ARM\|arm\)" "$FILE">/dev/null 2>&1 52*6bb49c87SMaksims Svecovs then 53*6bb49c87SMaksims Svecovs exit_code=1 54*6bb49c87SMaksims Svecovs sed -i "s/\(opyright.*\)\(ARM\|arm\)/\1Arm/" $FILE 55*6bb49c87SMaksims Svecovs user_warning 56cf9346cbSMaksims Svecovs fi 57cf9346cbSMaksims Svecovsdone <<< "$FILES" 58cf9346cbSMaksims Svecovs 59cf9346cbSMaksims Svecovsif [ $exit_code -eq 1 ] 60cf9346cbSMaksims Svecovsthen 61cf9346cbSMaksims Svecovs echo -e "$RED""Please stage updated files$BLANK before commiting or use$YELLOW git commit --no-verify$BLANK to skip copyright check" 62cf9346cbSMaksims Svecovsfi 63cf9346cbSMaksims Svecovsexit $exit_code 64