#!/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 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.*$ARM_RGX" "$FILE" echo } while read -r FILE; do if [ -z "$FILE" ] then break fi # Check if correct copyright notice is in file. # To reduce false positives, we assume files with no # copyright notice do not require it. if ! grep "opyright.*$YEAR_NOW.*$ARM_RGX" "$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.*$ARM_RGX" "$FILE" >/dev/null 2>&1 then exit_code=1 sed -i "s/\(opyright.*\)$YEAR_RGX\(.*$ARM_RGX\)/\1$(date +"%Y"), Arm/" $FILE user_warning # If it is single "date" type of entry - add the copyright extension to current year. elif grep "opyright.*$YEAR_RGX.*$ARM_RGX" "$FILE" >/dev/null 2>&1 then exit_code=1 sed -i "s/\(opyright.*$YEAR_RGX\)\(.*$ARM_RGX\)/\1-$(date +"%Y"), Arm/" $FILE user_warning fi # Even if the year is correct - verify that Arm copyright is formatted correctly. elif grep "opyright.*\(ARM\|arm\)" "$FILE">/dev/null 2>&1 then exit_code=1 sed -i "s/\(opyright.*\)\(ARM\|arm\)/\1Arm/" $FILE user_warning 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