redirección de texto exec() para PHP en Windows en el gancho posterior a la confirmación de SVN

StackOverflow https://stackoverflow.com/questions/1787335

Pregunta

He estado siguiendo la publicación a continuación intentando conectar mi instalación de SubVersion a mi rastreador de errores Mantis.

Cómo integrar Subversion y Mantis

Todo funciona bien hasta la última línea donde llama al script Mantis checkin.php y le envía la cadena de mensaje que se ha creado en el script.

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

Entiendo que el propósito de la línea es enviar la cadena del mensaje a ESTDIN cual mantis checkin.php lee para verificar si hay una cadena coincidente adecuada y actualizar la base de datos de seguimiento de Mantis.

De todos modos, sé que la convención anterior es para una instalación de Linux.Mi pregunta es ¿cómo usaría PHP? ejecutivo() funcionar en un entorno Windows para llamar al script PHP (checkin.php) y pasar la cadena construida en este programa a ESTDIN.

NOTA: Preferiría no cambiar la lógica en checkin.php para leer desde STDIN.

¡¡Gracias!!

¿Fue útil?

Solución 2

No he recibido ninguna más puestos de trabajo, pero después de jugar con la función del sistema (), yo era capaz de redirigir un archivo como entrada a STDIN pero fue incapaz de pasar una cadena de datos. Me dieron la opción de hacer algo similar a un trabajo por lotes en mi PHP donde me gustaría escribir un archivo temporal, y el uso que, como aporte a STDIN, pero desde que ya estaba utilizando un archivo por lotes para la post-commit hook en SVN a la llamada el script PHP que pensé que seguir adelante y acaba de escribir el guión completo que hay en el archivo por lotes.

Aquí está mi solución final para el SVN post-commit hook:

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%

Este script actualiza un billete mantis juego con un comentario en el siguiente formato:

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

Otros consejos

Los redireccionamientos que utilizan < y > son procesados ​​por el shell; en Windows, por cmd.exe.La forma más sencilla de obtener esa funcionalidad es con system(). exec() no utiliza un shell:para usarlo, tendrías que orquestar la redirección antes de llamar al exec.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top