mirror of
https://github.com/OpenFOAM/OpenFOAM-6.git
synced 2025-12-08 06:57:46 +00:00
489 lines
14 KiB
Bash
489 lines
14 KiB
Bash
#---------------------------------*- sh -*-------------------------------------
|
|
# ========= |
|
|
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
# \\ / O peration | Website: https://openfoam.org
|
|
# \\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
|
|
# \\/ M anipulation |
|
|
#------------------------------------------------------------------------------
|
|
# License
|
|
# This file is part of OpenFOAM.
|
|
#
|
|
# OpenFOAM is free software: you can redistribute it and/or modify it
|
|
# under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
# for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
# Script
|
|
# HookFunctions
|
|
#
|
|
# Description
|
|
# Functions for automatically checking code pre commit and receive
|
|
#
|
|
#------------------------------------------------------------------------------
|
|
|
|
headerSeparator="-----------------------------------"
|
|
|
|
echoIndent=" "
|
|
|
|
sourceBanner="(\
|
|
/\*---------------------------------------------------------------------------\*\\\\|\
|
|
/\*--------------------------------\*- C\+\+ -\*----------------------------------\*\\\\)
|
|
========= \|
|
|
\\\\\\\\ / F ield \| OpenFOAM: The Open Source CFD Toolbox
|
|
\\\\\\\\ / O peration \| Website: https://openfoam\.org
|
|
\\\\\\\\ / A nd \| Copyright \(C\) [0-9-]+ OpenFOAM Foundation
|
|
\\\\\\\\/ M anipulation \|
|
|
-------------------------------------------------------------------------------
|
|
License
|
|
This file is part of OpenFOAM\.
|
|
|
|
OpenFOAM is free software: you can redistribute it and/or modify it
|
|
under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
\(at your option\) any later version\.
|
|
|
|
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
FITNESS FOR A PARTICULAR PURPOSE\. See the GNU General Public License
|
|
for more details\.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with OpenFOAM\. If not, see <http://www\.gnu\.org/licenses/>\.
|
|
(.|
|
|
)*?
|
|
\\\\\*---------------------------------------------------------------------------\*/"
|
|
|
|
scriptBanner="(\
|
|
#------------------------------------------------------------------------------|\
|
|
#---------------------------------\*- sh -\*-------------------------------------|\
|
|
#----------------------------------\*-sh-\*--------------------------------------|\
|
|
#----------------------------\*- makefile-gmake -\*------------------------------)
|
|
# ========= \|
|
|
# \\\\\\\\ / F ield \| OpenFOAM: The Open Source CFD Toolbox
|
|
# \\\\\\\\ / O peration \| Website: https://openfoam\.org
|
|
# \\\\\\\\ / A nd \| Copyright \(C\) [0-9-]+ OpenFOAM Foundation
|
|
# \\\\\\\\/ M anipulation \|
|
|
#------------------------------------------------------------------------------
|
|
# License
|
|
# This file is part of OpenFOAM\.
|
|
#
|
|
# OpenFOAM is free software: you can redistribute it and/or modify it
|
|
# under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# \(at your option\) any later version\.
|
|
#
|
|
# OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
# FITNESS FOR A PARTICULAR PURPOSE\. See the GNU General Public License
|
|
# for more details\.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with OpenFOAM\. If not, see <http://www\.gnu\.org/licenses/>\.
|
|
(.|
|
|
)*?
|
|
#------------------------------------------------------------------------------"
|
|
|
|
dictBanner="\
|
|
/\*--------------------------------\*- C\+\+ -\*----------------------------------\*\\\\
|
|
\| ========= \| \|
|
|
\| \\\\\\\\ / F ield \| OpenFOAM: The Open Source CFD Toolbox \|
|
|
\| \\\\\\\\ / O peration \| Version: 6 \|
|
|
\| \\\\\\\\ / A nd \| Website: https://openfoam\.org \|
|
|
\| \\\\\\\\/ M anipulation \| \|
|
|
\\\\\*---------------------------------------------------------------------------\*/"
|
|
|
|
|
|
#-----------------------------------------------------------------------------
|
|
|
|
#
|
|
# report failure and exit
|
|
#
|
|
die()
|
|
{
|
|
echo "$hookName hook failure" 1>&2
|
|
echo $headerSeparator 1>&2
|
|
echo '' 1>&2
|
|
echo "$@" 1>&2
|
|
echo '' 1>&2
|
|
exit 1
|
|
}
|
|
|
|
|
|
#
|
|
# report failure, listing bad files and exit
|
|
#
|
|
dieOnBadFiles()
|
|
{
|
|
if [ -n "$badFiles" ]
|
|
then
|
|
echo "$hookName hook failure" 1>&2
|
|
echo $headerSeparator 1>&2
|
|
echo "$@" 1>&2
|
|
echo '' 1>&2
|
|
echo "File(s):" 1>&2
|
|
echo "$badFiles" 1>&2
|
|
echo '' 1>&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
|
|
#
|
|
# qualify 'git grep' to check cached value or from a specific commit
|
|
#
|
|
gitScopeGrep()
|
|
{
|
|
if [ "$#" -gt 0 ]
|
|
then
|
|
echo "$1:"
|
|
else
|
|
echo "--cached -- "
|
|
fi
|
|
}
|
|
|
|
|
|
#
|
|
# qualify 'git show' to check cached value or from a specific commit
|
|
#
|
|
gitScopeShow()
|
|
{
|
|
if [ "$#" -gt 0 ]
|
|
then
|
|
echo "$1:"
|
|
else
|
|
echo ":"
|
|
fi
|
|
}
|
|
|
|
|
|
#
|
|
# check for bad strings, characters, etc
|
|
#
|
|
checkIllegalCode()
|
|
{
|
|
echo "$hookName: check bad strings/characters etc ..." 1>&2
|
|
|
|
reBad="("$'\t'")"
|
|
msgBad="<TAB>"
|
|
|
|
scope=$(gitScopeGrep $@)
|
|
|
|
badFiles=$(
|
|
for f in $fileList
|
|
do
|
|
case "$f" in
|
|
# exclude potential makefiles
|
|
(*[Mm]akefile* | wmake/rules/* | bin/tools/gtagsrc | *.f* | *.v[cf]proj | *.pdf | *.png | *.html | *.gif | *.css | *.gz)
|
|
;;
|
|
(*)
|
|
fileType=`file -b $f`
|
|
if [ "$fileType" != "data" ]
|
|
then
|
|
# parse line numbers from grep output:
|
|
# <lineNr>: contents
|
|
lines=$(git grep -E -hn -e "$reBad" $scope"$f" |
|
|
sed -e 's@:.*@@' |
|
|
tr '\n' ' '
|
|
)
|
|
[ -n "$lines" ] && echo "$echoIndent$f -- lines: $lines"
|
|
fi
|
|
;;
|
|
esac
|
|
done
|
|
)
|
|
|
|
dieOnBadFiles "Remove/correct bad '$msgBad' references"
|
|
}
|
|
|
|
|
|
#
|
|
# limit line length to 80-columns
|
|
#
|
|
checkLineLength()
|
|
{
|
|
echo "$hookName: check line lengths ..." 1>&2
|
|
|
|
scope=$(gitScopeGrep $@)
|
|
|
|
badFiles=$(
|
|
for f in $fileList
|
|
do
|
|
# limit to *.[CH] files
|
|
case "$f" in
|
|
(*.[CH])
|
|
# parse line numbers from grep output:
|
|
# <lineNr>: contents
|
|
lines=$(git grep -hn -e '^.\{81,\}' $scope"$f" |
|
|
sed -e 's@:.*@@' |
|
|
tr '\n' ' '
|
|
)
|
|
[ -n "$lines" ] && echo "$echoIndent$f -- lines: $lines"
|
|
;;
|
|
esac
|
|
done
|
|
)
|
|
|
|
dieOnBadFiles "Limit code to 80 columns before pushing"
|
|
}
|
|
|
|
|
|
#
|
|
# limit line length to 80-columns, except C++ comment lines
|
|
#
|
|
checkLineLengthNonComments()
|
|
{
|
|
echo "$hookName: check line lengths ..." 1>&2
|
|
|
|
scope=$(gitScopeGrep $@)
|
|
|
|
badFiles=$(
|
|
for f in $fileList
|
|
do
|
|
# limit to *.[CH] files
|
|
case "$f" in
|
|
(*.[CH])
|
|
# parse line numbers from grep output:
|
|
# <lineNr>: contents
|
|
lines=$(git grep -hn -e '^.\{81,\}' \
|
|
--and --not -e '^ *//' \
|
|
$scope"$f" |
|
|
sed -e 's@:.*@@' |
|
|
tr '\n' ' '
|
|
)
|
|
[ -n "$lines" ] && echo "$echoIndent$f -- lines: $lines"
|
|
;;
|
|
esac
|
|
done
|
|
)
|
|
|
|
dieOnBadFiles "Limit code to 80 columns before pushing"
|
|
}
|
|
|
|
|
|
#
|
|
# limit line length to 80-columns, except #directive lines
|
|
#
|
|
checkLineLengthNonDirective()
|
|
{
|
|
echo "$hookName: check line lengths ..." 1>&2
|
|
|
|
scope=$(gitScopeGrep $@)
|
|
|
|
badFiles=$(
|
|
for f in $fileList
|
|
do
|
|
# limit to *.[CH] files
|
|
case "$f" in
|
|
(*.[CH])
|
|
# parse line numbers from grep output:
|
|
# <lineNr>: contents
|
|
lines=$(git grep -hn -e '^.\{81,\}' \
|
|
--and --not -e '^ *#' \
|
|
$scope"$f" |
|
|
sed -e 's@:.*@@' |
|
|
tr '\n' ' '
|
|
)
|
|
[ -n "$lines" ] && echo "$echoIndent$f -- lines: $lines"
|
|
;;
|
|
esac
|
|
done
|
|
)
|
|
|
|
dieOnBadFiles "Limit code to 80 columns before pushing"
|
|
}
|
|
|
|
|
|
#
|
|
# check for non-standard code patterns
|
|
#
|
|
checkNonStandardCodePatterns()
|
|
{
|
|
echo "$hookName: checking for non-standard code ..." 1>&2
|
|
|
|
scope=$(gitScopeGrep $@)
|
|
|
|
badFiles=$(
|
|
for f in $fileList
|
|
do
|
|
# limit to *.[CH] files
|
|
case "$f" in
|
|
(*.[CH])
|
|
# Directly report the incorrect markers
|
|
git grep -n --color -e '> >' \
|
|
--or -w -e 'NULL' \
|
|
$scope"$f"
|
|
;;
|
|
esac
|
|
done
|
|
)
|
|
|
|
dieOnBadFiles "$(cat<<MESSAGE
|
|
Please revise the files reported below for the following non-standard code:
|
|
|
|
1. Spaced ending of multi-level template parameters are not allowed, such as:
|
|
|
|
List<List<scalar> >
|
|
|
|
which instead should be:
|
|
|
|
List<List<scalar>>
|
|
|
|
2. The use of the 'NULL' macro should be replaced by 'nullptr'
|
|
|
|
$headerSeparator
|
|
MESSAGE
|
|
)"
|
|
}
|
|
|
|
|
|
#
|
|
# check that header files respect the policy of file names matching the
|
|
# #ifndef/#define bounds
|
|
#
|
|
checkHeaderIfndefNames()
|
|
{
|
|
echo "$hookName: check header files #ifndef/#define names ..." 1>&2
|
|
|
|
scope=$(gitScopeGrep $@)
|
|
|
|
badFiles=$(
|
|
for f in $fileList
|
|
do
|
|
# limit to *.H files
|
|
case "$f" in
|
|
(*.H)
|
|
fileName=$(basename $f)
|
|
correctMangledName=$(basename $f | sed 's=\.=_=')
|
|
|
|
if git grep -q -e "#ifndef.*_H" $scope"$f" && \
|
|
! git grep -q -e "#ifndef.*[ _]$correctMangledName" $scope"$f"
|
|
then
|
|
echo "Updated #ifndef/#define for: $f" 1>&2
|
|
echo $f
|
|
|
|
currentMangled=$(grep "#ifndef.*_H" $f | sed 's=#ifndef\s*==')
|
|
|
|
sed -i -e 's='$currentMangled'='$correctMangledName'=' $f
|
|
fi
|
|
;;
|
|
esac
|
|
done
|
|
)
|
|
|
|
dieOnBadFiles "Some header files were automatically updated to respect #ifndef naming convention; Please check these before pushing"
|
|
}
|
|
|
|
|
|
#
|
|
# check that the banners are correctly formatted
|
|
#
|
|
checkBanner()
|
|
{
|
|
echo "$hookName: check banner ..." 1>&2
|
|
|
|
scopeGrep=$(gitScopeGrep $@)
|
|
scopeShow=$(gitScopeShow $@)
|
|
|
|
badFiles=$(
|
|
for f in $fileList
|
|
do
|
|
# Source files
|
|
if git grep -q -e "Copyright (C) [0-9-]\+ OpenFOAM Foundation" $scopeGrep"$f"
|
|
then
|
|
case "$f" in
|
|
(*.c|*.C|*.Cver|*.cxx|*.dox|*.H|*.h)
|
|
if ! git show $scopeShow"$f" | pcregrep -q -M "$sourceBanner"
|
|
then
|
|
echo $f
|
|
fi
|
|
;;
|
|
(*.*)
|
|
# No check for other extensions yet
|
|
;;
|
|
(*)
|
|
# Assume that everything with a copyright statement but without
|
|
# an extension is a script with '#' comments
|
|
if ! git show $scopeShow"$f" | pcregrep -q -M "$scriptBanner"
|
|
then
|
|
echo $f
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
# Case files
|
|
elif git grep -q -e "^FoamFile" $scopeGrep"$f"
|
|
then
|
|
if ! git show $scopeShow"$f" | pcregrep -q -M "$dictBanner"
|
|
then
|
|
echo $f
|
|
fi
|
|
fi
|
|
done
|
|
)
|
|
|
|
dieOnBadFiles "Fix banner formating before pushing"
|
|
}
|
|
|
|
|
|
#
|
|
# check that OpenFOAM Foundation copyright is current
|
|
#
|
|
checkCopyright()
|
|
{
|
|
echo "$hookName: check copyright ..." 1>&2
|
|
|
|
scope=$(gitScopeGrep $@)
|
|
year=$(date +%Y)
|
|
|
|
badFiles=$(
|
|
for f in $fileList
|
|
do
|
|
startYear=$(
|
|
git grep -h -e "Copyright.*OpenFOAM" $scope"$f" | \
|
|
head -n 1 | \
|
|
sed 's/[^0-9]*\([0-9]*\).*/\1/g'
|
|
)
|
|
endYear=$(
|
|
git grep -h -e "Copyright.*-.*OpenFOAM" $scope"$f" | \
|
|
head -n 1 | \
|
|
sed 's/[^-]*-\([0-9]*\).*/\1/g'
|
|
)
|
|
|
|
if [ "$startYear" != "" ]
|
|
then
|
|
if [ "$endYear" != "" ]
|
|
then
|
|
# Date is of type 2011-2012 OpenFOAM Foundation
|
|
if [ "$year" != "$endYear" ]
|
|
then
|
|
echo "Updated copyright for: $f" 1>&2
|
|
echo "$f"
|
|
sed -i -e "s/$startYear-$endYear OpenFOAM/$startYear-$year OpenFOAM/g" $f
|
|
fi
|
|
else
|
|
# Date is of type 2011 OpenFOAM Foundation
|
|
if [ "$year" != "$startYear" ]
|
|
then
|
|
echo "$f"
|
|
echo "Updated copyright for: $f" 1>&2
|
|
sed -i -e "s/$startYear OpenFOAM/$startYear-$year OpenFOAM/g" $f
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
)
|
|
|
|
dieOnBadFiles "Some copyright dates were automatically updated; Please check these before pushing"
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------------
|