chirp/tools/checkpatch.sh
Dan Smith 5cf524d3c1 Add tools/checkpatch.sh for style compliance checking
This adds tools/checkpatch.sh which checks a given HG revision
for style compliance. We should call this as part of our tests,
have Jenkins call it, and keep it full of things we'd like to
enforce. Developers should run this on their patches (when
possible) before submitting.

Had this idea after the patch for #1277
2013-12-02 13:27:15 -08:00

69 lines
1.3 KiB
Bash
Executable file

#!/bin/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"
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 $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$'
}
files=$(get_touched_files tip)
rev=${1:-tip}
for testname in $TESTS; do
eval "$testname $rev \"$files\""
done
if [ -z "$ERROR" ]; then
echo "Patch '${rev}' is OK"
else
exit 1
fi