1

私は、SubVersionのインストールをMantisバグトラッカーにフックしようとして、以下の投稿をフォローしています。

SubversionとMantisを統合する方法

Mantis checkin.phpスクリプトを呼び出し、スクリプトで作成されたメッセージ文字列をフィードする最後の行まで、すべてが正常に機能します。

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

この行の目的は、適切な一致する文字列をチェックしてMantis追跡データベースを更新するためにMantisのcheckin.phpが読み取るメッセージ文字列をSTDINに送信することであることを理解しています。

とにかく、私は上記の規則がLinuxインストール用であることを知っています。私の質問は、Windows環境でPHP exec()関数を使用してPHPスクリプト(checkin.php)を呼び出し、このプログラムで作成された文字列をSTDINに渡す方法です。

注: STDINから読み取るようにcheckin.phpのロジックを変更したくない。

ありがとう!!

4

2 に答える 2

1

<および>を使用したリダイレクトは、シェルによって処理されます。Windowsではcmd.exeによって処理されます。その機能を取得する最も簡単な方法は、を使用することですsystem()exec()シェルを使用しません。シェルを使用するには、execを呼び出す前にリダイレクトを調整する必要があります。

于 2009-11-24T02:09:32.843 に答える
1

これ以上投稿はありませんが、system()関数をいじった後、STDINへの入力としてファイルをリダイレクトできましたが、データの文字列を渡すことができませんでした。PHPでバッチジョブと同様のことを実行して一時ファイルを作成し、それをSTDINへの入力として使用するオプションがありましたが、SVNのコミット後フックにバッチファイルを使用して呼び出していたためです。私が考えたPHPスクリプトは、先に進んで、スクリプト全体をバッチファイルに書き込むだけです。

SVNのコミット後フックの最終的な解決策は次のとおりです。

post-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%

このスクリプトは、一致するmantisチケットを次の形式のコメントで更新します。

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
于 2009-12-01T19:37:06.367 に答える