我有以下的pre-commit钩子使用JavaScript Lint检查JavaScript文件提交之前:为什么我的SVN预先提交挂钩在本地工作,但没有提交?
#!/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 /我的/ SVN /回购/位置6781#号码是交易号码
但是它在svn commit上没有错误。
我已经占到:
- 由于没有$ PATH,我明确设置的所有命令的路径。
- 我正在从jsl命令中捕获正确的错误代码以退出。
- 我正在将STDOUT推送到STDERR作为jsl命令,因此它将显示在提交失败中。
我错过了什么?
你的,
特雷弗
是的,我正要向你指出,在提交之前你不能有一个修订号,对于预先提交的钩子,你必须使用事务编号,我把我的pre-commit钩子脚本写成从pre-commit脚本中分离出脚本,我只需要脚本“pre-commit”调用它,我的pre-commit钩子可以同时使用-r或者-t参数,并且在脚本中称为pre-commit,I用“-t”来调用它。这样,我可以从命令行直接测试我的pre-commit钩子脚本。 – 2010-12-03 18:33:48