-
Eoin Clerkin authoredEoin Clerkin authored
check-licence-header.sh 3.06 KiB
#!/bin/bash
# Copyright (C) 2021 Facility for Antiproton and Ion Research in Europe, Darmstadt
# SPDX-License-Identifier: GPL-3.0-only
# First commited by Eoin Clerkin
# In the array excludes all directories and/or files are listed which shouldn't be
# tested if they habe the proper license statement.
# For all the directories/files listed in the array an explanation should be given.
excludes=(
# The directory external is excluded from the check since this directory
# contains code which isn't part of CbmRoot but external dependencies so
# we don't have to test for our license header
external
# The directory is excluded since the files have a license header
# inherited from the ALICE experiment. The code was copied by the
# original author when he started working for CBM.
papaframework
# The parameter server was copied from FairRoot and modified
# Since we are not sure yet how this needs to be handled the
# files are not tested
ParameterMQServer
)
RETURN_CODE="0"
licenceHeaderCheck () {
FILE_CODE="0";
sed -n '2p' $1 | grep -q ' SPDX-License-Identifier: GPL-3.0-only'
if [ $? -ne 0 ]; then
echo "[ERROR] $1, line 2 missing spdx licence header declaration."
((RETURN_CODE++))
FILE_CODE="1"
fi
head -n 1 $1 | grep -q '\/\* Copyright (C) [0-9-]* [a-zA-Z -/]*, [a-zA-Z/]*'
if [ $? -ne 0 ]; then
echo "[ERROR] $1; line 1 has syntax errors in its licence header."
((RETURN_CODE++))
FILE_CODE="1"
fi
sed -n '3p' $1 | grep -q ' Authors: .[^\*\/]*\*/'
if [ $? -ne 0 ]; then
echo "[ERROR] $1; line 3 has syntax errors in its licence header."
((RETURN_CODE++))
FILE_CODE="1"
fi
sed -n '3p' $1 | grep -q '\[committer\]'
if [ $? -ne 0 ]; then
echo "[ERROR] $1; line 3 has missing first commiter information."
((RETURN_CODE++))
FILE_CODE="1"
fi
if [[ ${FILE_CODE} -eq 0 ]]; then
echo "[OK] File: $1 passes licence header check."
fi
}
if [ $# -eq 1 ]; then
UPSTREAM=$1
else
if [ -z $UPSTREAM ]; then
UPSTREAM=$(git remote -v | grep git.cbm.gsi.de[:/]computing/cbmroot | cut -f1 | uniq)
if [ -z $UPSTREAM ]; then
echo "Error: Name of upstream repository not provided and not found by automatic means"
echo 'Please provide if by checking your remotes with "git remote -v" and exporting UPSTREAM'
echo "or passing as an argument"
exit -1
fi
fi
fi
if [ -f $1 ]; then
CHANGED_FILES="$1"
echo "LICENCE HEADER CHECK FOR FILE: $1"
else
echo "Upstream name is :" $UPSTREAM
BASE_COMMIT=$UPSTREAM/master
CHANGED_FILES=$(git diff --name-only $BASE_COMMIT | egrep '\.cxx$|\.h|\.C$')
fi
# Exclude files which shouldn't be tested
# Check the license header for all other files
for FILE in $CHANGED_FILES; do
for EXCLUDE in "${excludes[@]}"; do
FILE=$(echo $FILE | egrep -v "$EXCLUDE")
done
if [[ -n $FILE && -f $FILE && -s $FILE ]]; then
licenceHeaderCheck $FILE
fi
done
if [ $RETURN_CODE -eq "0" ]; then
echo "[OK] Licence header passes automatic checks."
else
echo "[FAIL] Visit https://redmine.cbm.gsi.de/projects/cbmroot/wiki/Licence for information on correct syntax for licence header."
fi
exit $RETURN_CODE;