¿Por qué obtengo este error: Falling Post-Commit Hook (código de salida 255) sin salida?
-
30-10-2019 - |
Pregunta
Recibo el siguiente error cuando me comprometo con un repositorio:
post-commit hook failed (exit code 255) with no output.
El código de compromiso posterior es el siguiente:
@echo off
setlocal enableextensions
set REPOS=%1
set REV=%2
set TEMPFILE=C:\TEMP\%REV%.txt
set LOGFILE=D:\svn\logs\mysite\post_commit.log
set MANTIS_PATH="D:\home\mantis"
"C:\Program Files\SlikSvn\bin\svnlook" author %REPOS% -r %REV% >> %TEMPFILE% 2>>C:\TEMP\err.txt
"C:\Program Files\SlikSvn\bin\svnlook" date %REPOS% -r %REV% >> %TEMPFILE% 2>>C:\TEMP\err.txt
"C:\Program Files\SlikSvn\bin\svnlook" changed %REPOS% -r %REV% >> %TEMPFILE% 2>>C:\TEMP\err.txt
echo revision:[%REV%] >> %TEMPFILE% 2>>C:\TEMP\err.txt
"C:\Program Files\SlikSvn\bin\svnlook" log %REPOS% -r %REV% >> %TEMPFILE% 2>>C:\TEMP\err.txt
date /T >> %LOGFILE% 2>>C:\TEMP\err.txt
time /T >> %LOGFILE% 2>>C:\TEMP\err.txt
D:\wamp\bin\php\php5.3.0\php.exe %MANTIS_PATH%\scripts\checkin.php < %TEMPFILE% >> %LOGFILE% 2>>C:\TEMP\err.txt
- Como puede ver, hay un registro de error extenso, pero el registro de errores nunca se pobla (a menos que ponga un error obvio como una ruta faltante)
- Los entornos de desarrollo y en vivo son Windows
- La línea que parece casar el error es la final, donde se llama PHP. Cuando saque esto, la confirmación funciona sin problemas
- Cuando ejecuto esto manualmente en la línea de comando, funciona y no muestra ningún error (obvio). AFAIK SVN se ejecuta bajo el sistema de usuario por defecto, que es lo suficientemente alto como privilegios para no tener que preocuparse
Como probablemente hayas hecho, esto está conectando mis checkins SVN con Mantis Bug Tracker. Lo interesante es que el script PHP se está ejecutando, es decir, las notas se están agregando a los errores y el cierre automático de los problemas está funcionando. Parece errores por alguna razón.
Estoy usando tortoisesvn para comprometerse, pero usando la línea de comandos (sliksvn) obtengo la misma salida:
svn ci -m "this is a test" test.txt
Sending test.txt
Transmitting file data .
Committed revision 1337.
Warning: post-commit hook failed (exit code 255) with no output.
Mantis 'checkin.php se ve así (algunos comentarios generales eliminados para legibilidad):
#!/usr/bin/php -q
<?php
global $g_bypass_headers;
$g_bypass_headers = 1;
require_once( dirname( dirname( __FILE__ ) ) . DIRECTORY_SEPARATOR . 'core.php' );
# Make sure this script doesn't run via the webserver
if( php_sapi_name() != 'cli' ) {
echo "checkin.php is not allowed to run through the webserver.\n";
exit( 1 );
}
# Check that the username is set and exists
$t_username = config_get( 'source_control_account' );
if( is_blank( $t_username ) || ( user_get_id_by_name( $t_username ) === false ) ) {
echo "Invalid source control account ('$t_username').\n";
exit( 1 );
}
if( !defined( "STDIN" ) ) {
define( "STDIN", fopen( 'php://stdin', 'r' ) );
}
# Detect references to issues + concat all lines to have the comment log.
$t_commit_regexp = config_get( 'source_control_regexp' );
$t_commit_fixed_regexp = config_get( 'source_control_fixed_regexp' );
$t_comment = '';
$t_issues = array();
$t_fixed_issues = array();
while(( $t_line = fgets( STDIN, 1024 ) ) ) {
$t_comment .= $t_line;
if( preg_match_all( $t_commit_regexp, $t_line, $t_matches ) ) {
$t_count = count( $t_matches[0] );
for( $i = 0;$i < $t_count;++$i ) {
$t_issues[] = $t_matches[1][$i];
}
}
if( preg_match_all( $t_commit_fixed_regexp, $t_line, $t_matches ) ) {
$t_count = count( $t_matches[0] );
for( $i = 0;$i < $t_count;++$i ) {
$t_fixed_issues[] = $t_matches[1][$i];
}
}
}
# If no issues found, then no work to do.
if(( count( $t_issues ) == 0 ) && ( count( $t_fixed_issues ) == 0 ) ) {
echo "Comment does not reference any issues.\n";
exit( 0 );
}
# Login as source control user
if( !auth_attempt_script_login( $t_username ) ) {
echo "Unable to login\n";
exit( 1 );
}
# history parameters are reserved for future use.
$t_history_old_value = '';
$t_history_new_value = '';
# add note to each bug only once
$t_issues = array_unique( $t_issues );
$t_fixed_issues = array_unique( $t_fixed_issues );
# Call the custom function to register the checkin on each issue.
foreach( $t_issues as $t_issue_id ) {
if( !in_array( $t_issue_id, $t_fixed_issues ) ) {
helper_call_custom_function( 'checkin', array( $t_issue_id, $t_comment, $t_history_old_value, $t_history_new_value, false ) );
}
}
foreach( $t_fixed_issues as $t_issue_id ) {
helper_call_custom_function( 'checkin', array( $t_issue_id, $t_comment, $t_history_old_value, $t_history_new_value, true ) );
}
exit( 0 );
No hay solución correcta
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow