php exit code 255,为什么我得到这个错误:post-commit钩子失败(退出代码255),没有输出...

post-commit hook failed (exit code 255) with no output.

的后提交代码如下:

@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

正如你可以看到有大量的错误日志记录,但错误日志永远不会被填充(除非我把一个明显的错误,如缺少路径)

无论开发和生活EN vironments是Windows

似乎遇到错误的那一行是最后一行 - PHP被调用。当我拿出这个提交工作没有问题

当我在命令行上手动运行它,它的工作原理并没有显示任何(明显的)错误。据我所知SVN通过足够高privilleges不担心

正如你可能已经做出来的默认用户在系统运行,这是螳螂bug跟踪系统挂接我的SVN签入。有趣的是,正在执行PHP脚本,即将注释添加到错误中并自动关闭问题。它似乎出于某种原因而出错。

我使用TortoiseSVN提交,但使用命令行(SlikSVN)我得到的结果相同:

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.

螳螂checkin.php看起来像这样(为便于阅读,删除了一些一般性评论):

#!/usr/bin/php -q

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);