SVN post/pre - commit钩子检查php在windows上的语法



我最近将SVN服务器迁移到windows服务器。一切都进行得很顺利——好得令人难以置信——结果就是这样。

我有一个预提交钩子,它对任何提交的PHP文件进行语法检查,如果检查失败,则拒绝提交并给出适当的错误信息-我将在下面复制这个。显然,这在Windows上不起作用,我还没能找到一个替代方案。有人知道什么吗?

我真的不知道从哪里开始转换下面的程序以在Windows系统上运行,特别是考虑到它所依赖的*nix工具的数量:-S

我读过关于预提交钩子,它使用像Codesniffer这样的东西来做PHP检查-这是我最好/最简单的路线吗?

#!/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:PHPphp -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

最新更新