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