2010-04-12 11 views
5

Ich bin neu in Python und PySVN im Allgemeinen, und ich versuche, mein SVN-Repository mit Pysvn zu exportieren. Hier ist mein Code:Wie kann man Anmeldefehler mit PySVN abfangen?

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

der gut arbeitet, aber wenn das Passwort falsch ist oder der Benutzername ist unbekannt, dieser Code sitzt einfach. Ich glaube, es wird auf der SVN-Seite eine Benutzeranmeldung angezeigt, aber ich weiß nicht, wie ich mit callback_get_login vorgehen soll. Jede Hilfe würde sehr geschätzt werden.

Antwort

1

Verwenden Sie SSH? In diesem Fall stellt SSH möglicherweise die Anmeldeaufforderung dar, und PySVN kann nicht viel dazu beitragen. Sie könnten versuchen, mit der SSH-Konfiguration auf der Client-Seite durcheinander Tastatur interaktive Eingabeaufforderungen zu deaktivieren:

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

+0

Es ruft tatsächlich auf Unfuddle über https, so bin ich irgendwie begrenzt in was ich tun können Server-Seite (obwohl Sie mich gefragt haben, ob Unfuddle API lohnt sich zu betrachten ... hmm) – Geoff

+0

@ars Entschuldigung, diese Seite ist nicht verfügbar. – umpirsky

4

Wenn die Anmeldeinformationen falsch pysvn sind, wird den Rückruf anrufen, wenn die Anmeldeinformationen immer noch falsch sind sie es wieder anrufen werden, und wieder, und es wird einfach so weitermachen, bis die Zugangsdaten korrekt sind.

Für ein automatisiertes Skript ist es wahrscheinlich besser, den Callback nicht zu setzen und stattdessen den Standardbenutzernamen und das Standardpasswort durch Aufrufen von set_default_username und set_default_password für die Instanz pysvn.Client festzulegen.

Mit dieser Einstellung falsche Anmeldeinformationen führen dazu, dass Pysvn eine Ausnahme propagieren, was darauf hindeutet, dass Sie den Rückruf festlegen, den Sie abfangen und in eine sinnvolle Fehlermeldung verwandeln können.

+1

Ich hasse es absolut über Pysvn. Es bietet keinerlei Möglichkeit, die Tatsache zu erkennen, dass die Anmeldung fehlgeschlagen ist. Es wird nicht einmal in der Instanz übergeben, so dass Sie zumindest einige Statusvariablen setzen können. – spuriousdata

+0

Wenn ich set_default_username und set_default_password und callback_get_login entfernen, erhalte ich den Fehler "callback_get_login required". Irgendeine Idee? – umpirsky

+0

Ich habe das funktioniert, indem ich das interaktive Flag mit [set_interactive] (http://pysvn.tigris.org/docs/pysvn_prog_ref.html#pysvn_client_set_interactive) auf False gesetzt habe. In Kombination mit gültigen Daten für set_default_username und set_default_password arbeitet der Client ohne Eingabeaufforderungen. –