google的cpplint是个好东西,很想利用起来。
今天研究了一下,在svn服务器上配置了一下,可以对提交代码进行检查了。
提交代码不写日志不是个好习惯,检查日志的代码如下:
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
这个功能很费了一番官方,因为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