SVN Post-Commit脚本失败并导致工作副本更新问题

时间:2011-11-03 17:25:15

标签: perl svn smtpclient post-commit post-commit-hook

我写了Perl post-commit hook,通过Perl Net::SMTP模块发送电子邮件。当我尝试提交时,我收到以下错误:

Sending        subversion/README
Transmitting file data .svn: Commit failed (details follow):
svn: MERGE of '/mfxcm/trunk/subversion': 200 OK (http://source)

提交确实有效,但修改了我的工作副本 直到我做了“svn up”时才更新:

$ svn commit -m"Finding what's causing commit errors. I think it's the post-commit script"
Sending        subversion/README
Transmitting file data .svn: Commit failed (details follow):
svn: MERGE of '/mfxcm/trunk/subversion': 200 OK (http://source)
david@DaveBook.local:~/workspace/svn-cm-trunk/subversion
$ svn up
G    README
Updated to revision 94.

我玩过后提交脚本。首先,我写了一个简单的文本消息,只是打印出一条简单的文本消息,以确保工作正常。然后,我使用了我,并在不同时间退出,以查看MERGE问题的来源。

我在脚本中找到了一个新的Net :: SMTP对象:

    if ($smtpUser) {
        $smtp->auth( $self->SmtpUser, $self->SmtpPassword)
            or croak qq(Unable to connect to mailhost "@{[$self->SmtpHost]}")
        . qq( as user "@{[$self->SmtpUser]}");
    }

如果我的脚本中启用了此行,则会出现MERGE问题。否则,我的整个脚本会按预期运行或多或少。

我也可以从命令行运行脚本,一切正常。它仅在作为事后失败的提交后挂钩触发时。我甚至以Apache身份登录并运行脚本没有任何问题。

MERGE错误是什么意思,为什么Subversion运行post-commit钩子时会得到它?

1 个答案:

答案 0 :(得分:0)

SVN后提交挂钩在Windows中的特殊帐户下运行,我猜对于UNIX / Linux也是如此,它看起来就像你正在使用的那样。我们在Windows中碰到了这样的事情。

此帐户是否可能无法通过该服务器发送邮件?

当直接运行(就像你)时,脚本可以正常工作,但在post-commit钩子中运行时则不行。它类似于某些cron系统,您的环境/权限可能与您在交互式shell中习惯的非常不同。