2011-11-03 73 views
1

我已經編寫了一個Perl post-commit hook,它通過Perl Net::SMTP模塊發送電子郵件。我得到以下錯誤,當我嘗試做一個承諾:SVN提交後腳本失敗並導致工作副本更新問題

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

提交實際工作過,但沒有更新我的工作拷貝 修訂,直到我做了一個「SVN起來」:

$ 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) 
[email protected]:~/workspace/svn-cm-trunk/subversion 
$ svn up 
G README 
Updated to revision 94. 

我玩過我的post-commit腳本。首先,我寫了一個簡單的例子,只是打印出一個簡單的文本信息,以確保工作正常。然後,我在不同的時間使用我的並退出以查看MERGE問題的來源。

我在我的腳本,我創建了一個新的網絡點:: 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鉤子時會得到它?

+0

我已經將問題追溯到Net :: SMTP,它嘗試'$ obj-> response()== CMD_OK'。出於某種原因,在這一點上有些事情正在崩潰。 SMTP.pm是最新版本,Net :: Cmd也是如此。 –

回答

0

SVN post-commit掛鉤在Windows的一個特殊賬戶下運行,我猜想UNIX/Linux也是如此,它看起來像你正在使用的。我們在Windows中遇到了類似這樣的事情。

該帳戶是否有可能無法通過該服務器發送郵件?

當直接運行(和你一樣)的時候,腳本可以正常工作,但是在post-commit鉤子中運行時不會。它與某些cron系統類似,您的環境/權限可能與您在交互式shell中使用的環境/權限非常不同。

+0

我們的存儲庫是使用運行在用戶'apache'下的Apache httpd的Linux。我能夠以用戶'apache'登錄並從命令行運行鉤子而沒有任何問題。如果'Net :: SMTP'無法連接時出現問題,我會預期'$ smtp'返回一個'NULL',並且會使我的腳本失敗。 –

+0

我已經進一步將問題追溯到Net :: SMTP,它執行了一個'$ obj-> response'。這是沒有發生的事情。 –

+0

您是否願意嘗試使用Mail :: Sendmail發送郵件或發送郵件的許多其他模塊之一?這是我們使用的一個,雖然沒有在任何SVN掛鉤。它可能會工作得更好,我不認爲這很難使用。 – jimtut

相關問題