chirp/tools/checkpatch.sh

73 lines
1.5 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# CHIRP coding standards compliance script
#
# To add a test to this file, create a new check_foo() function
# and then add it to the list of TESTS= below
#
TESTS="check_long_lines check_bug_number check_commit_message_line_length"
function check_long_lines() {
local rev="$1"
local files="$2"
# For now, ignore this check on chirp/
files=$(echo $files | sed -r 's#\bchirp[^ ]*\b##')
if [ -z "$files" ]; then
return
fi
pep8 --select=E501 $files || \
error "Please use <80 columns in source files"
}
function check_bug_number() {
local rev="$1"
hg log -vr $rev | grep -qE '#[0-9]+' || \
error "A bug number is required like #123"
}
function _less_than_80() {
while true; do
read line
if [ -z "$line" ]; then
break
elif [ $(echo -n "$line" | wc -c) -ge 80 ]; then
return 1
fi
done
}
function check_commit_message_line_length() {
local rev="$1"
hg log -vr $rev | (_less_than_80) || \
error "Please keep commit message lines to <80 columns"
}
# --- END OF TEST FUNCTIONS ---
function error() {
echo FAIL: $*
ERROR=1
}
function get_touched_files() {
local rev="$1"
hg status -n --change $rev | grep '\.py$'
}
rev=${1:-tip}
files=$(get_touched_files $rev)
for testname in $TESTS; do
eval "$testname $rev \"$files\""
done
if [ -z "$ERROR" ]; then
echo "Patch '${rev}' is OK"
else
exit 1
fi