Apache Subversion将hook Stderror预提交到Apache的error.log
我正在一台喘息服务器上运行带有Apache2.2.22的SVN1.8.10。我已经安装了phpcs svn pre-commit,它通过pre-commit钩子工作。除了pre-commit钩子的输出外,其他所有操作都正常工作。当吊钩通过检查时,变更已提交。当钩子失败时,更改不会提交,但我得到以下结果:Apache Subversion将hook Stderror预提交到Apache的error.log,apache,svn,pre-commit-hook,Apache,Svn,Pre Commit Hook,我正在一台喘息服务器上运行带有Apache2.2.22的SVN1.8.10。我已经安装了phpcs svn pre-commit,它通过pre-commit钩子工作。除了pre-commit钩子的输出外,其他所有操作都正常工作。当吊钩通过检查时,变更已提交。当钩子失败时,更改不会提交,但我得到以下结果: $ svn -F svn-commit.tmp commit Mailer.php Sending Mailer.php Transmitting file data .svn:
$ svn -F svn-commit.tmp commit Mailer.php
Sending Mailer.php
Transmitting file data .svn: E165001: Commit failed (details follow):
svn: E165001: A repository hook failed
这些错误不会返回到subversion客户端,而是记录在apache日志文件中。有没有人知道在哪里可以找到stderror为什么要访问apache error.log而不是通过客户端返回
存储库位于远程服务器上,而不是本地服务器上
==apache error.log==
[Fri Mar 27 13:18:05 2015] [error] [client 66.79.106.82] Could not MERGE resource "/claven/svn/!svn/act/a76ca493-7302-48b3-8cff-39b0abb2bc08" into "/claven/svn/trunk/system/classes/Claven". [409, #0]
[Fri Mar 27 13:18:05 2015] [error] [client 66.79.106.82] Commit blocked by pre-commit hook (exit code 1) with output:\nExamining trunk/system/classes/Claven/Mailer.php for PHP Syntax\n\n\x1b[1mFILE: trunk/system/classes/Claven/Mailer.php\x1b[0m\n----------------------------------------------------------------------\n\x1b[1mFOUND 1 ERROR AFFECTING 1 LINE\x1b[0m\n----------------------------------------------------------------------\n 49 | \x1b[31mERROR\x1b[0m | Parameter comment must end with a full stop\n----------------------------------------------------------------------\n\nTime: 134ms; Memory: 4.75Mb\n\n [409, #165001]
==预提交挂钩==
REPOS="$1"
TXN="$2"
PSPC=/usr/bin/scripts/phpcs-svn-pre-commit
SVNLOOK=/usr/bin/svnlook
$SVNLOOK log -t "$TXN" "$REPOS" | \
grep "[a-zA-Z0-9]" > /dev/null || exit 1
CHANGED=`$SVNLOOK changed -t "$TXN" "$REPOS" | grep "^[U|A]" | awk '{print $2}' | grep \\.php$`
for FILE in $CHANGED
do
echo "Examining $FILE for PHP Syntax" >&2
if [ $? -ne 0 ]
then
echo 1>&2
echo "***********************************" 1>&2
echo "PHP error in: $FILE:" 1>&2
echo `echo "$MESSAGE" | sed "s| -| $FILE|g"` 1>&2
echo "***********************************" 1>&2
exit 1
fi
done
"$PSPC" --extensions=php --standard=Claven --tab-width=4 -n "$REPOS" -t "$TXN" >&2 || exit 1
set -e
"$REPOS"/hooks/commit-access-control.pl "$REPOS" $TXN "$REPOS"/hooks/commit-access-control.cfg
exit 0
在我的ruleset.xml中,我添加了一个参数名,以便将命令行变量硬编码到我的自定义标准中。一旦我移除它,我就收到了PHPC的预期输出 我不确定它是错误的标识符还是错误的值,但删除它解决了这个问题
<!-- <arg name="colors" /> -->