我有以下预提交钩子,可以在提交之前使用JavaScript Lint检查 JavaScript 文件:
#!/bin/env bash
REPOS="$1"
TXN="$2"
ECHO=/bin/echo
GREP=/bin/grep
SED=/bin/sed
SVN=/usr/bin/svn
SVNLOOK=/usr/bin/svnlook
FILES_CHANGED=`$SVNLOOK changed -r$TXN $REPOS | $SED -e "s/^....//g"`
JSL=/usr/local/bin/jsl
JSL_CONF=/usr/local/etc/jsl.conf
for FILE in $FILES_CHANGED
do
if $ECHO $FILE | $GREP "\.js$"
then
$SVN cat -r$TXN file://$REPOS/$FILE | $JSL -conf $JSL_CONF -stdin 1>&2
JSL_ERROR_CODE=$?
if [ $JSL_ERROR_CODE != 0 ]
then
exit $JSL_ERROR_CODE
fi
fi
done
# If we got here, nothing is wrong.
exit 0
此代码在本地工作如下: ./pre-commit /my/svn/repo/location 6781 # 编号为交易编号
但是它在 svn commit 上没有正确错误。
我已经说明了:
- 没有 $PATH,我明确设置了所有命令路径。
- 我从 jsl 命令中捕获了正确的错误代码以退出。
- 我正在将 jsl 命令的 STDOUT 推送到 STDERR,因此它将显示在提交失败中。
我错过了什么?
你的,
特雷弗