这是我当前的checkstyle shell脚本。如果我在TRUNK上提交但在分支上没有,它可以正常工作。我真的不明白为什么它不起作用。有人可以帮助我吗?
#!/bin/sh
###################################################
#
# Verify Checkstyle
#
###################################################
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
JAVA=/opt/ibm/java2-i386-50/bin/java
CHECKSTYLE=/usr/local/checkstyle/checkstyle-all-5.1.jar
TMPDIR=/tmp/$TXN
REPORT=/tmp/$TXN/report
CHECKSTYLE_CONFIG=/usr/local/checkstyle/checkstyle.xml
CHANGED=`$SVNLOOK changed -t "$TXN" "$REPOS" | grep -v "^D" | awk '{print $2}'`
mkdir -p $TMPDIR
for LINE in $CHANGED ; do
FILE=`echo $LINE | egrep -v Test\\.java$ | egrep -v \\/src\\/test\\/ | egrep -v \\/js\\/ext`
if [ -n "$FILE" ] ; then
DIRNAME=`dirname $FILE`
mkdir -p $TMPDIR/$DIRNAME
$SVNLOOK cat $REPOS --transaction $TXN $FILE > $TMPDIR/$FILE
fi
done
$JAVA -jar $CHECKSTYLE -c $CHECKSTYLE_CONFIG -r $TMPDIR > $TMPDIR/tmpfile.checkstyle
X=$?
if [ $X -ne 0 ] ; then
cat $TMPDIR/tmpfile.checkstyle > /dev/stderr
rm -Rf $TMPDIR
exit 1
fi
rm -Rf $TMPDIR
exit 0
谢谢!
答案 0 :(得分:5)
建议:不要将此作为预提交脚本。
checkstyle
捕获某些不存在问题的内容,或者开发人员编写它的方式实际上比checkstyle
坚持它的内容更清晰,更容易理解的情况会发生什么?当您使用checkstyle
或findbugs
之类的内容时,您必须了解自己会得到一些误报。更好的方法是使用像Jenkins这样的连续构建引擎。 Jenkins可以设置为每次提交时自动启动构建。詹金斯可以:
您不必使用Jenkins。哈德森还在那里。 CruiseControl也是如此,您可以使用TeamCity,Bamboo和其他许多连续构建系统。我喜欢Jenkins,因为开发非常活跃,设置起来很简单。我花了大约30分钟下载并在我第一次听到它的时候开始了我的第一份工作。
我知道你问过你的预提交钩子,我不想听起来像推销员(Jenkins是免费的开源软件,而且我与项目没有关系),但做了像checkstyle
检查预提交挂钩是否有问题。使用连续构建服务器只是解决此问题的更好方法。
答案 1 :(得分:0)
提示。
尝试比较目录结构,暂时创建(删除“rm -Rf $ TMPDIR”)。
也许你在主干和分支之间有不同之处,如:
外线: /tmp/12/code/file.java
分支机构: /tmp/br1/12/code/file.java