diff options
Diffstat (limited to 'check')
-rwxr-xr-x | check | 179 |
1 files changed, 0 insertions, 179 deletions
@@ -1,179 +0,0 @@ -#!/bin/bash - -# Copyright 2017 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. - -# CIRV code checker - -PYLINT="pylint" -PYLINT_RC='pylintrc' -PYLINT_RATING_GATE="10" -PYLINT_RATING_MIN=$PYLINT_RATING_GATE -FILE_REGEX="(^valid|\.py)$" -FILE_LIST="/tmp/cirv_check_list.txt" -BC=`which bc` - -# print usage if requested -function usage() { - cat <<EOM -Usage: $0 [TARGET]... - -Performs code check for defined TARGETs. Target can be file or directory. -In case that directory is specified, then it will be searched recursively -for all python files. -If TARGET is not specified, then all python files from current CIRV -repository will be checked. -File will pass check if its pylint rating is greater or equal to $PYLINT_RATING_GATE. -Otherwise gained pylint rating will be displayed. - - - -h, --help Script usage - -b, --black Suppress colours. Output will be black&white. - -m, --modified Script will check python files, which have - been modified within current repository. - -Examples: - ./check - - Check all python files in current CIRV repository - - ./check tools/sdv/valid - - Check just one file. - - ./check -m - - Check all modified files in current repository - - ./check tools/sdv - - Check all python files in given directories - -EOM -} - -# compare pylint result with predefined gate -function rating_is_ok() { - # bc is not part of basic Centos installation - # so let us check if it is available - if [ "x$BC" == "x" ] ; then - # no bc, so do integer comparison only - int_rating=`echo $1 | sed -e 's/\..*$//'` - int_rating_min=`echo $PYLINT_RATING_MIN | sed -e 's/\..*$//'` - [ $int_rating -lt $int_rating_min ] && PYLINT_RATING_MIN=$int_rating - if [ $int_rating -lt $PYLINT_RATING_GATE ] ; then - return 1 - else - return 0 - fi - else - if (( $(echo "$1<$PYLINT_RATING_MIN" | bc -l) )) ; then - PYLINT_RATING_MIN=$1 - fi - if (( $(echo "$1<$PYLINT_RATING_GATE" | bc -l) )) ; then - return 1 - else - return 0 - fi - fi -} - -##### MAIN ##### -# check if help is requested -if [ "x$1" == "x-h" -o "x$1" == "x--help" ] ; then - usage - exit 0 -fi - -# set colours -if [ "x$1" == "x-b" -o "x$1" == "x--black" ] ; then - shift - RED="" - GREEN="" - BLACK="" -else - RED="\e[31m" - GREEN="\e[32m" - BLACK="\e[0m" -fi - - -# check if pylint is available -if ! which $PYLINT &>/dev/null ; then - echo "$PYLINT is not available, thus check can't be executed" - exit 1 -fi - -# check if we were run within cirv directory -if [ ! -f INFO.yaml 2> /dev/null ] ; then - echo "`basename $0` must be run from root directory" - exit 2 -fi - -# 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}" | sort > $FILE_LIST -elif [ "x$*" == "x" ] ; then - # list is empty, check all python files - git ls-tree --name-only -r HEAD | egrep -i "${FILE_REGEX}" | sort > $FILE_LIST -else - for item in $* ; do - if [ -d $item ] ; then - git ls-tree --name-only -r HEAD $item | egrep -i "${FILE_REGEX}" | sort >> $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 -echo "Execution of pylint checks:" -if [ -s $FILE_LIST ] ; then - for pyfile in `cat $FILE_LIST | sort` ; do - # get base name - pyfile_basename="'"`basename $pyfile .py`"'" - # run pylint and extract final rating - output=`$PYLINT --rcfile $PYLINT_RC $pyfile 2>/dev/null` - rating=`echo -e $output | tail -n3 | grep rated | sed -e 's/^.*rated at \(-\?[0-9.]*\).*$/\1/'` - # evaluate and display aquired rating - if [ "x$rating" == "x" ] ; then - # rating is not available for files without python statements - printf " %-70s %-6s\n" $pyfile "NA" - elif rating_is_ok $rating ; then - printf " %-70s ${GREEN}%-6s${BLACK}\n" $pyfile "OK" - else - echo -e "$output" | awk '/^\*+ Module|^[A-Z]\:/' - printf " %-70s ${RED}%-6s${BLACK}\n" $pyfile $rating - fi - done -else - echo "Nothing to check." - exit 4 -fi - -# clean up -rm $FILE_LIST &> /dev/null - -if [ "$PYLINT_RATING_MIN" != "$PYLINT_RATING_GATE" ] ; then - echo -e "Pylint check has failed. All files must have score ${PYLINT_RATING_GATE}.\n" - exit 1 -else - exit 0 -fi -##### MAIN end ##### |