From f41dd29a18007b80fcdaab6c2367a0b38c3d9e67 Mon Sep 17 00:00:00 2001 From: Martin Klozik Date: Thu, 15 Oct 2015 07:44:08 +0100 Subject: Code checker Initial implementation of code checker script. It uses pylint with vsperf specific pylintrc file to check code syntax, design, etc. Check can be performed for all files, specified directories or for modified files only. It will skip files defined by EXCLUDE_MODULES in conf/00_common.conf file. Details about script usage can be obtained by ./check -h. Change-Id: I7d894a2c4db92b7b9d4d4312e6f56bc48c8d5dbf JIRA: VSPERF-114 Signed-off-by: Martin Klozik Reviewed-by: Billy O Mahony Reviewed-by: Maryam Tahhan --- check | 143 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100755 check (limited to 'check') diff --git a/check b/check new file mode 100755 index 00000000..f7fca3da --- /dev/null +++ b/check @@ -0,0 +1,143 @@ +#!/bin/bash + +# Copyright 2015 Intel Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# VSPERF code checker + +PYLINT="pylint" +PYLINT_RC='pylintrc' +PYLINT_RATING_GATE="10" +FILE_REGEX="(vsperf|.*\.py)" +FIND_OPTIONS="-regextype posix-egrep -iregex (./)?$FILE_REGEX" +FILE_LIST="/tmp/vsperf_check_list.txt" + +# print usage if requested +function usage() { + cat </dev/null ; then + echo "$PYLINT is not available, thus check can't be executed" + exit 1 +fi + +# check if we were run within vsperf directory +if [ ! -x ./vsperf 2> /dev/null ] ; then + echo "`basename $0` must be run from vsperf root directory" + exit 2 +fi + +# get list of excluded modules +EXCLUDED_MODULES=`grep "^ *EXCLUDE_MODULES" conf/00_common.conf | tr '"' "'"` + +# get list of files to be checked +rm $FILE_LIST &> /dev/null +if [ "x$1" == "x-m" -o "x$1" == "x--modified" ] ; then + # check of modified files requested + git status --porcelain | cut -b4- | egrep -i "^${FILE_REGEX}$" > $FILE_LIST +elif [ "x$*" == "x" ] ; then + # list is empty, check all python files + find . -type f $FIND_OPTIONS > $FILE_LIST +else + for item in $* ; do + if [ -d $item ] ; then + find $item -type f $FIND_OPTIONS >> $FILE_LIST + elif [ -f $item ] ; then + echo $item >> $FILE_LIST + else + echo "$item doesn't exist, thus check was aborted" + exit 3 + fi + done +fi + +# check if there is anything to check +if [ -s $FILE_LIST ] ; then + for pyfile in `cat $FILE_LIST | sort` ; do + # get base name + pyfile_basename="'"`basename $pyfile .py`"'" + # and check if it should be excluded or not + if ( echo $EXCLUDED_MODULES | grep -w $pyfile_basename > /dev/null ) ; then + printf "%-70s \e[32m%-6s\e[0m\n" $pyfile "EXCLUDED" + continue + fi + # run pylint and extract final rating + rating=`$PYLINT --rcfile $PYLINT_RC $pyfile 2>/dev/null | tail -n3 | grep rated | sed -e 's/^.*rated at \([0-9.]*\).*$/\1/'` + # evaluate and display aquired rating + if rating_is_ok $rating ; then + printf "%-70s \e[32m%-6s\e[0m\n" $pyfile "OK" + else + printf "%-70s \e[31m%-6s\e[0m\n" $pyfile $rating + fi + done +else + echo "Nothing to check." + exit 4 +fi + +# clean up +rm $FILE_LIST &> /dev/null + +exit 0 +##### MAIN end ##### -- cgit 1.2.3-korg