2009-11-24 3 views
1

아래의 게시물을 통해 내 Subversion 설치를 Mantis 버그 추적기에 연결하려고했습니다.SVN 게시 커밋 후크에서 Windows 용 PHP의 exec() 텍스트 리다이렉션

How To Integrate Subversion and Mantis

모든는 사마귀의 checkin.php 스크립트를 호출하고 그것을 스크립트에서 생성 된 메시지 문자열을 공급하는 마지막 줄 때까지 잘 작동합니다.

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

나는 라인의 목적은 사마귀 'checkin.php는 사마귀 추적 데이터베이스를 적절한 일치하는 문자열을 확인하고 업데이트하기 위해 읽어 STDIN에 메시지 문자열을 보내는 것입니다 알고 있습니다.

어쨌든 위의 규칙은 Linux 설치용입니다. 내 질문은 어떻게 exec() 함수를 사용하여 Windows 환경에서 PHP 스크립트 (checkin.php)를 호출하고이 프로그램에 내장 된 문자열을 STDIN으로 전달하는 방법입니다.

참고 : STDIN에서 읽으려면 checkin.php의 논리를 변경하지 않는 것이 좋습니다.

감사합니다.

답변

1

나는 더 이상 게시물을 얻지 못했지만 system() 함수를 사용하여 타인에게 파일을 STDIN의 입력으로 리디렉션 할 수 있었지만 데이터 문자열을 전달할 수는 없었습니다. 임시 파일을 쓰고 STDIN의 입력으로 사용하는 PHP에서 배치 작업과 비슷한 작업을 수행 할 수있는 옵션이 있지만 SVN의 포스트 커밋 훅에 대한 배치 파일을 이미 사용하고 있으므로 내가 앞서 가서 배치 파일에 전체 스크립트를 작성한다고 생각한 PHP 스크립트. 이 스크립트는 다음과 같은 형식의 코멘트와 일치하는 사마귀 티켓을 업데이트

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

후 commit.bat : 여기

는 SVN 후 커밋 후크에 대한 내 마지막 솔루션입니다 :

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() 쉘을 사용하지 않습니다 : 사용하려면 exec를 호출하기 전에 리디렉션을 조정해야합니다.

+0

@wallyk - +1 HEL에 대한 충실한 팁. 아직 거기에 꽤 있지만, 그것은 올바른 방향으로 나를 넣어주지 감사합니다! 지금은 파일을 전달할 수 있지만 여전히 문자열을 전달하는 방법을 알아낼 수 없습니다. – jaywon