使用cpplint进行提交代码的风格检查

google的cpplint是个好东西,很想利用起来。

今天研究了一下,在svn服务器上配置了一下,可以对提交代码进行检查了。

1. 要写日志

  提交代码不写日志不是个好习惯,检查日志的代码如下:

EPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook


# All checks passed, so allow the commit.
LOGMSGLEN=$($SVNLOOK log -t "$TXN" "$REPOS" | egrep "[a-zA-Z0-9]" | wc -c)

MIN_LENGTH=10
if [ "$LOGMSGLEN" -lt "$MIN_LENGTH" ]
then
        echo "  -err: Log message can't be empty! you must be input more than $MIN_LENGTH characters as comment\n" 1>&2
        exit 1
fi

2. cpplint检查

这个功能很费了一番官方,因为google提供的cpplint.py是读取文件来进行检查的,最多的情况是提交一个文件名然后读取文件名进行检查,但是在svn上

不是这样的了,找不到这样的文件。不过幸亏有一个“-”参数,从屏幕上读取要检查的代码内容。费了九牛二虎之力,修改了无数次,让这个功能功能能正常工作了。

FILES=$($SVNLOOK changed -t "$TXN" "$REPOS" | awk '/^[AU]/ {print $NF}')

#FILTERS='^((?!include)|(?!sdk))+\.(cpp|c|h)$'
FILTERS="\.(cpp|c|h)$"

for FILE in $FILES; do
   if echo $FILE | tr A-Z a-z | grep -Eq "$FILTERS"
   then
        CONTENT=$($SVNLOOK cat -t "$TXN" "$REPOS" "$FILE")
        MESSAGE=$"(echo "$CONTENT" | python /var/lib/cpplint/cpplint.py  --output=vs7 - 2>&1)"
        if [ $? -ne 0 ]; then
            echo  "file is $FILE" 1>&2
            echo  "$MESSAGE" 1>&2
            exit 1
        fi
    fi
done

你可能感兴趣的:(Google,cpplint,subve)