# HG changeset patch # User Chris Cannam # Date 1310393731 -3600 # Node ID 0714a86b80777e85ac32940f2f4525aa83c85ff2 # Parent d63711ff6740425c0d48b568636cde96dcebd03b Check for repeated request (thus failed login) before looking up cached data, so we can cache in confidence without resending invalid login details (fixing #205) diff -r d63711ff6740 -r 0714a86b8077 easyhg.py --- a/easyhg.py Thu Jul 07 10:59:50 2011 +0100 +++ b/easyhg.py Mon Jul 11 15:15:31 2011 +0100 @@ -230,17 +230,21 @@ def __init__(self, ui, url, user, passwd): self.auth_store = EasyHgAuthStore(ui, url, user, passwd) - def ask(self, force_dialog): + def ask(self, repeat): if self.auth_store.user and self.auth_store.passwd and self.auth_store.remember: - if not force_dialog: + if not repeat: return (self.auth_store.user, self.auth_store.passwd) dialog = QtGui.QDialog() layout = QtGui.QGridLayout() dialog.setLayout(layout) - layout.addWidget(QtGui.QLabel(_('
Please provide your login details for the repository at%s
:') % self.auth_store.argless_url()), 0, 0, 1, 2)
+ heading = _('Login required')
+ if repeat:
+ heading = _('Login failed: please try again')
+ label_text = _(('
Please provide your login details for the repository at%s
:') % (heading, self.auth_store.argless_url()))
+ layout.addWidget(QtGui.QLabel(label_text), 0, 0, 1, 2)
user_field = QtGui.QLineEdit()
if self.auth_store.user: user_field.setText(self.auth_store.user)
@@ -334,17 +338,7 @@
self, realm, authuri)
user, passwd = authinfo
- if user and passwd:
-# self.ui.write("note: user and passwd both provided\n")
- return orig_find(self, realm, authuri)
-
-# self.ui.write("want username and/or password for %s\n" % authuri)
-
- force_dialog = False
-
-# if self.__easyhg_last:
-# self.ui.write("last = realm '%s' authuri '%s'\n" % self.__easyhg_last)
-# self.ui.write("me = realm '%s' authuri '%s'\n" % (realm, authuri))
+ repeat = False
if (realm, authuri) == self.__easyhg_last:
# If we are called again just after identical previous
@@ -352,16 +346,17 @@
# wrong. So we note this to force password prompt (and avoid
# reusing bad password indefinitely). Thanks to
# mercurial_keyring (Marcin Kasperski) for this logic
-# self.ui.write("same again!\n")
- force_dialog = True
+ repeat = True
+
+ if user and passwd and not repeat:
+ return orig_find(self, realm, authuri)
dialog = EasyHgAuthDialog(self.ui, authuri, user, passwd)
- (user, passwd) = dialog.ask(force_dialog)
+ (user, passwd) = dialog.ask(repeat)
-# self.add_password(realm, authuri, user, passwd)
+ self.add_password(realm, authuri, user, passwd)
self.__easyhg_last = (realm, authuri)
-# self.ui.write("done = realm '%s' authuri '%s'\n" % self.__easyhg_last)
return (user, passwd)