2010-04-12 44 views
5

我是一般的Python和PySVN的新手,我試圖使用pysvn導出我的SVN倉庫。這是我的代碼:如何使用PySVN捕獲登錄失敗?

#set up svn login data 
def svn_credentials (realm, username, may_save): 
    return True, svn_login_name, svn_login_password, False 

#establish connection 
svn_client = pysvn.Client() 
svn_client.callback_get_login = svn_credentials 

#export data 
svn_client.export('server-path-goes-here', 'client-path-goes-here', force=True) 

哪些工作正常,但如果密碼錯誤或用戶名未知,此代碼只是坐。我相信它正在SVN端提供用戶登錄提示,但我不知道如何檢查callback_get_login發生了什麼。任何幫助將不勝感激。

回答

1

您使用的是SSH嗎?在這種情況下,也許它是SSH提供登錄提示,PySVN不能做太多的事情。你可以嘗試用SSH配置在客戶端搞亂禁用鍵盤交互提示:

http://www.ssh.com/support/documentation/online/ssh/adminguide/32/Configuring_the_Server_and_Client.html

+0

它實際上是通過https向Unfuddle發出呼叫,所以我在服務器端可以做的事情有限(儘管您已經提示我想知道Unfuddle的API是否值得看...嗯) – Geoff 2010-04-13 07:16:19

+0

@ars對不起,該頁面不可用。 – umpirsky 2011-12-22 07:52:19

4

如果憑據是錯誤的pysvn將調用回調,如果憑證仍是錯了,它會再次調用它,再一次,它會繼續這樣做,直到證書是正確的。

對於自動腳本,您可能最好不要設置回調,而應通過調用pysvn.Client實例上的set_default_username和set_default_password來設置默認用戶名和密碼。

由於安裝程序不正確,憑證會導致pysvn傳播異常,提示您設置可以捕獲的回調並將其轉化爲有意義的錯誤消息。

+1

我絕對討厭pysvn。它不提供任何方式來檢測登錄失敗的事實。它甚至不會傳入實例,因此您至少可以設置一些狀態變量。 – spuriousdata 2011-09-04 04:56:49

+0

當我set_default_username和set_default_password並刪除callback_get_login,我得到錯誤「callback_get_login required」。任何想法? – umpirsky 2011-12-22 07:51:17

+0

我已經通過[set_interactive](http://pysvn.tigris.org/docs/pysvn_prog_ref.html#pysvn_client_set_interactive)將交互標誌設置爲False來獲得此工作。結合給予set_default_username和set_default_password的有效數據,客戶端無需提示即可運行。 – 2013-07-05 14:28:41