build: add check-controller.sh, a utility to test controller files
The main purpose of the script is to check if the module declaration matches and if associated cbi resources are properly referenced. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
parent
08a2b27df5
commit
6f47c5657f
1 changed files with 30 additions and 0 deletions
30
build/check-controllers.sh
Executable file
30
build/check-controllers.sh
Executable file
|
@ -0,0 +1,30 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
[ -d build ] || {
|
||||
echo "Execute as ./build/check-controllers.sh" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
find . -type f -name '*.lua' -path '*/controller/*' | while read controller; do
|
||||
controller="${controller#./}"
|
||||
base="${controller%%/controller/*}"
|
||||
|
||||
sed -rne 's#^.*\b(cbi|form)\([[:space:]]*("([^"]*)"|\047([^\047]*)\047)[[:space:]]*[,)].*$#\1 \3\4#gp' "$controller" | while read type map; do
|
||||
model="$base/model/cbi/$map.lua"
|
||||
package="${controller##*/controller/}"; package="${package%.lua}"; package="luci.controller.${package//\//.}"
|
||||
|
||||
if ! grep -sqE '\bmodule[[:space:]]*\(?[[:space:]]*("|\047|\[=*\[)'"$package" "$controller"; then
|
||||
echo "'$controller' does not containt the expected\n\t'module(\"$package\", ...)' line.\n"
|
||||
fi
|
||||
|
||||
grep -sqE '\b(Form|SimpleForm)[[:space:]]*\(' "$model" && ! grep -sqE '\bMap[[:space:]]*\(' "$model" && is_form=1 || is_form=0
|
||||
|
||||
if [ ! -f "$model" ]; then
|
||||
echo -e "'$controller' references $type('$map')\n\tbut expected file '$model' does not exist.\n"
|
||||
elif [ $type = "cbi" -a $is_form = 1 ]; then
|
||||
echo -e "'$controller' references $type('$map')\n\tbut '$model' looks like a Form or SimpleForm.\n"
|
||||
elif [ $type = "form" -a $is_form = 0 ]; then
|
||||
echo -e "'$controller' references $type('$map')\n\tbut '$model' does not look like a Form or SimpleForm.\n"
|
||||
fi
|
||||
done
|
||||
done
|
Loading…
Reference in a new issue