SVN post/pre commit钩子检查windows上的php语法
我最近已将我的SVN服务器迁移到windows服务器。这一切都进行得非常顺利——这太好了,不可能是真的——结果是 我有一个pre-commit钩子,它对任何提交的PHP文件运行语法检查,并在检查失败时拒绝提交,并显示适当的错误消息-我将在下面复制此消息。显然,这在Windows上不起作用,而且我还没有找到一种替代方法。外面有人有什么东西吗 我真的不知道从哪里开始将下面的转换为在Windows系统上运行,特别是考虑到它所依赖的*nix工具的数量:-S 我读过一些关于预提交钩子的文章,这些钩子使用Codesniffer之类的东西来进行PHP检查——这是我最好/最简单的方法吗SVN post/pre commit钩子检查windows上的php语法,php,svn,ubersvn,Php,Svn,Ubersvn,我最近已将我的SVN服务器迁移到windows服务器。这一切都进行得非常顺利——这太好了,不可能是真的——结果是 我有一个pre-commit钩子,它对任何提交的PHP文件运行语法检查,并在检查失败时拒绝提交,并显示适当的错误消息-我将在下面复制此消息。显然,这在Windows上不起作用,而且我还没有找到一种替代方法。外面有人有什么东西吗 我真的不知道从哪里开始将下面的转换为在Windows系统上运行,特别是考虑到它所依赖的*nix工具的数量:-S 我读过一些关于预提交钩子的文章,这些钩子使用C
#!/bin/bash
REPOS="$1"
TXN="$2"
PHP="/usr/bin/php"
SVNLOOK=/var/www/UberSVN/ubersvn/bin/svnlook
CHANGED=`$SVNLOOK changed -t "$TXN" "$REPOS" | awk '{print $2}'`
ERRORSA=0
for LINE in $CHANGED
do
FILE=`echo $LINE | egrep \\.php$`
if [ $? == 0 ]
then
MESSAGE=`$SVNLOOK cat -t "$TXN" "$REPOS" "${FILE}" | $PHP -l`
if [ $? -ne 0 ]
then
ERRORSA=1
echo "---------------------------------------------------------------------------------" 1>&2
echo "${FILE}: $MESSAGE" | sed "s| -| $FILE|g" 1>&2
fi
fi
done
if [ $ERRORSA == 1 ]
then
echo "---------------------------------------------------------------------------------" 1>&2
echo "Please correct the errors and try commit again. $ERRORSA" 1>&2
exit 1
fi
exit 0
我把这个小问题传给了我的同事,下面是一个预提交钩子,它可以在Windows托管的SVN服务器上执行PHP语法检查,还可以检查用户是否输入了提交消息。希望其他人会发现这很有用:
@echo off
:: Stops commits that don't include a log message of at least 6 characters.
@echo off
setlocal enableDelayedExpansion
rem Subversion sends through the repository path and transaction id
set REPOS=%1
set TXN=%2
svnlook log %REPOS% -t %TXN% | findstr ...... > nul
if %errorlevel% gtr 0 (goto err) else (goto cont)
:err
echo --------------------------------------------------------------------------- 1>&2
echo Your commit has been blocked because it didn't include a log message. 1>&2
echo Do the commit again, this time with a log message that describes your changes. 1>&2
echo --------------------------------------------------------------------------- 1>&2
exit 1
:cont
svnlook changed %REPOS% -t %TXN% |findstr /I /R "\.php$ \.phtml$" >lint.txt
for /F "tokens=2* delims= " %%i in (lint.txt) do (
set fname=%%i %%j
for /l %%a in (1,1,31) do if "!fname:~-1!"==" " set fname=!fname:~0,-1!
svnlook cat %REPOS% -t %TXN% "!fname!" | D:\PHP\php -l | findstr /I /B /V "No syntax errors" 1>&2
if !errorlevel! neq 1 (
echo in "%%i %%j" 1>&2
echo. 1>&2
echo --------------------------------------------------------------------------- 1>&2
exit 1
)
)
del lint.txt
也许这可以帮助您安装相关的unix工具:让它按照Lajos的建议工作,或者用您精通PHP的跨平台语言重写它?但不要因为试图在Windows批处理中编写循环而毁了你的生活。