2010-04-12 21 views
5

Jestem nowy w Pythonie i PySVN ogólnie i próbuję wyeksportować moje repozytorium SVN za pomocą pysvn. Oto mój kod:Jak przechwycić błędy logowania za pomocą 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) 

Co działa dobrze, ale jeśli hasło jest nieprawidłowe lub nazwa użytkownika jest nieznana, ten kod po prostu siedzi. Wydaje mi się, że jest wyświetlany z monitem logowania użytkownika po stronie SVN, ale nie mam pojęcia, jak sprawdzić, co się dzieje z callback_get_login. Każda pomoc będzie bardzo ceniona.

Odpowiedz

1

Czy używasz SSH? W takim przypadku może to SSH przedstawia monit logowania, a PySVN nie może wiele z tym zrobić. Można próbować ingerować w konfiguracji SSH po stronie klienta, aby wyłączyć klawiaturowych interaktywne komunikaty:

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

+0

W rzeczywistości woła o Unfuddle over https, więc jestem trochę ograniczony pod względem tego, co mogę zrobić po stronie serwera (chociaż zachęciłeś mnie do zastanowienia się, czy warto skorzystać z API Unfuddle'a ... hmm) – Geoff

+0

@ars Przepraszamy, ta strona jest niedostępna. – umpirsky

4

Jeśli poświadczenia są błędne pysvn wywoła zwrotnego, jeśli poświadczenia są nadal źle to nazwać ponownie, i znowu, i będzie to robić dalej, dopóki dane uwierzytelniające nie będą poprawne.

Dla skryptu automatycznego prawdopodobnie lepiej nie ustawiać wywołania zwrotnego, a zamiast tego ustawić domyślną nazwę użytkownika i hasło, wywołując set_default_username i set_default_password w instancji pysvn.Client.

Przy tym ustawieniu nieprawidłowe dane uwierzytelniające spowodują, że pysvn będzie propagować wyjątek sugerujący, że ustawiasz wywołanie zwrotne, które można przechwycić i przekształcić w znaczący komunikat o błędzie.

+1

Absolutnie Nienawidzę tego o pysvn. Nie pozwala w żaden sposób wykryć faktu, że logowanie nie powiodło się. Nie przekazuje nawet instancji, dzięki czemu można przynajmniej ustawić niektóre zmienne stanu. – spuriousdata

+0

Kiedy I set_default_username i set_default_password i usuwam callback_get_login, otrzymuję komunikat "callback_get_login required". Dowolny pomysł? – umpirsky

+0

Zrobiłem to działa również ustawiając flagę interakcyjną na False z [set_interactive] (http://pysvn.tigris.org/docs/pysvn_prog_ref.html#pysvn_client_set_interactive). W połączeniu z poprawnymi danymi przekazanymi do set_default_username i set_default_password, klient działa bez podpowiedzi. –

Powiązane problemy