VisualSVN 服务器不会触发提交后钩子

VisualSVN 服务器不会触发提交后钩子

我有一个让我抓狂的问题。我想将 VisualSVN Server 与 Mantis BT 集成,这样当我从 svn 客户端提交时,我会评论“已修复问题 #3”,然后 Mantis 中的问题就会被标记为已解决。

我按照步骤进行操作http://arklad.wordpress.com/2010/01/07/communicating-mantis-and-subversion-on-windows/

因此,我在 Mantis 中创建了一个名为“svn”的用户,并赋予其开发人员角色,并将其分配给我的项目。我编辑了我的 mantis config.inc,它看起来像这样:

<?php
$g_hostname = 'databaseserver';
$g_db_type = 'mssqlnative';
$g_database_name = 'mantisbt';
$g_db_username = 'mantis';
$g_db_password = 'mypass';

$g_allow_file_upload = ON;
$g_file_upload_method = DISK;

# User account that connects with Subversion
$g_source_control_account = 'svn';

    # Regular expression to be matched in the comments
    # Example: issue #1
    $g_source_control_regexp = '/\b(?:bug|issue|error)\s*[#]{0,1}(\d+)\b/i';

    # Regular expression to be matched to fix an issue
    # Example: fixed issue #1
    $g_source_control_fixed_regexp = '/\b(?:fixed|fixes|resolved)\s+(?:bug|issue|error)?\s*[#](\d+)\b/i';
    # Status after solving the issue
    $g_source_control_set_status_to = RESOLVED;
    # Resolution after solving the issue
    $g_source_control_set_resolution_to = FIXED;
?>

然后我创建post-commit.bat文件并将其放在 hooks 文件夹中:

@ECHO on
SET REPOS=%1
SET REV=%2

SET PHP="C:\Program Files (x86)\PHP\v5.3\php.exe"
SET CHECKIN="C:\WebSites\mantisbt-1.2.14\scripts\checkin.php"
SET SVNLOOK="C:\Program Files (x86)\VisualSVN Server\bin\svnlook.exe"

SET LOGFILE=C:\log.txt
SET AUTHORFILE=C:\author.txt
SET OUTPUTFILE=C:\output.txt

%SVNLOOK% log -r %REV% %REPOS% > %LOGFILE%
%SVNLOOK% author -r %REV% %REPOS% > %AUTHORFILE%

TYPE %LOGFILE% > %OUTPUTFILE%

%PHP% %CHECKIN% < %OUTPUTFILE% >> %LOGFILE%
ECHO "Post-commit for revision %REV% finished" >> %LOGFILE%
@ECHO off

所有路径都正确(检查多次),并且.bat当我单独运行时执行良好(它创建了输出文件)。

我得出的结论是 VisualSVN 没有触发post-commit.bat。我也多次重启了服务器。我做错了什么?

答案1

仔细检查 VisualSVN 服务器服务帐户(Network Service默认帐户)是否有访问提交后脚本尝试接触或操作的所有文件和文件夹的权限。

我认为无法访问这些位置是根本原因:

  • C:\Program Files (x86)\PHP\v5.3\还有孩子们,
  • C:\WebSites\mantisbt-1.2.14\scripts\而且它是孩子。

钩子脚本无法工作的原因有很多。您应该对钩子进行故障排除并获取错误输出以了解原因。错误输出有助于了解根本原因并进行修复。

为了将输出捕获到日志文件,您可以执行以下操作:

  1. 将当前post-commit.bat文件重命名为post-commit-run.bat

  2. 创建以下文件作为您的post-commit.bat文件:

    call "%~dp0post-commit-run.bat" %* > %1/hooks/post-commit.log 2>&1

  3. 提交到存储库并检查生成的日志文件。

相关内容