2009-11-24 51 views
1

我一直在按照下面試圖鉤住我的Subversion安裝到我的螳螂bug跟蹤系統後。EXEC()用於PHP文本重定向在Windows上SVN post-commit鉤子

How To Integrate Subversion and Mantis

一切工作正常,直到它調用螳螂checkin.php腳本,並且將其已在腳本創建的消息字符串的最後一行。

exec(CHECKIN . " <<< \"$message\""); 

我明白線的目的是消息字符串發送到STDIN其中螳螂checkin.php以便檢查一個合適的匹配的字符串,並更新跟蹤螳螂數據庫讀取。

不管怎麼說,我知道上面公約是一個Linux安裝。我的問題是,我將如何使用Windows環境中的PHP exec()函數調用PHP腳本(checkin.php)並將此程序中內置的字符串傳遞給STDIN

注意:我不希望更改checkin.php中的邏輯從STDIN讀取。

謝謝!

回答

1

我還沒有得到任何更多的帖子,但在使用system()函數玩弄後,我能夠將文件作爲輸入重定向到STDIN,但無法傳遞一串數據。我可以選擇在我的PHP中執行與批處理作業類似的任務,在那裏我將編寫一個臨時文件,並將其用作STDIN的輸入,但由於我已經使用批處理文件來提交SVN中的提交後掛接以調用PHP腳本我想我會繼續,並在批處理文件中寫入整個腳本。

這裏是我的SVN post-commit鉤子最終的解決方案:

後commit.bat

@ECHO off 
SETLOCAL 

SET REPOS=%1 
SET REV=%2 

SET PHP="C:\Program Files\PHP\php.exe" 
SET CHECKIN="D:\mantisbt-1.1.8\core\checkin.php" 
SET SVNLOOK="C:\Program Files\CollabNet\Subversion Server\svnlook.exe" 

SET LOGFILE=log%REV%.txt 
SET AUTHORFILE=author%REV%.txt 
SET OUTPUTFILE=output%REV%.txt 
SET CHANGEFILE=change%REV%.txt 

ECHO Author: > %AUTHORFILE% 
%SVNLOOK% author -r %REV% %REPOS% >> %AUTHORFILE% 

ECHO Log: > %LOGFILE% 
%SVNLOOK% log -r %REV% %REPOS% >> %LOGFILE% 

ECHO Files: > %CHANGEFILE% 
%SVNLOOK% changed %REPOS% %REV% >> %CHANGEFILE% 

ECHO Revision: %REV% > %OUTPUTFILE% 
%SVNLOOK% date %REPOS% -r %REV% >> %OUTPUTFILE% 
TYPE %AUTHORFILE% >> %OUTPUTFILE% 
TYPE %LOGFILE% >> %OUTPUTFILE% 
TYPE %CHANGEFILE% >> %OUTPUTFILE% 

TYPE %OUTPUTFILE% | %PHP% %CHECKIN% 

CALL DEL %LOGFILE% 
CALL DEL %AUTHORFILE% 
CALL DEL %CHANGEFILE% 
CALL DEL %OUTPUTFILE% 

此腳本更新匹配螳螂票在以下格式的註釋:

Revision: 41 
2009-11-25 11:47:18 -1000 (Wed, 25 Nov 2009) 
Author: 
jason 
Log: 
Testing for checkin for TER #12345 which fixes Mantis issue 0000001. 
Files: 
U TANDEM/CAB/CABLONGD 
1

重定向使用<和>由殼上的窗戶由cmd.exe的處理。獲得該功能的最簡單方法是使用system()exec()不使用shell:要使用它,必須在調用exec之前編排重定向。

+0

@wallyk - +1爲HEL pful小費。仍然不是那裏,但這確實讓我在正確的方向感謝!我現在可以傳遞一個文件,但仍然無法弄清楚如何傳遞一個字符串。 – jaywon 2009-11-24 02:39:37