url: more bytes/unicodes fussing in url.py around auth handling
authorAugie Fackler <augie@google.com>
Sat, 03 Mar 2018 14:28:51 -0500
changeset 36652 8381126bf43c
parent 36651 6b1eb4c610b4
child 36653 2f7a3c90c0d7
url: more bytes/unicodes fussing in url.py around auth handling Once again, these methods are a little annoying to handle because they can get unicodes or bytes depending on who's calling. I think we can probably clean this up a TON once we can run something like pytype and do typechecking of our Python, but until then this is going to be the easy way out. This fixes test-http-bundle1.t. Differential Revision: https://phab.mercurial-scm.org/D2599
contrib/python3-whitelist
mercurial/url.py
--- a/contrib/python3-whitelist	Sat Mar 03 14:24:21 2018 -0500
+++ b/contrib/python3-whitelist	Sat Mar 03 14:28:51 2018 -0500
@@ -143,6 +143,7 @@
 test-histedit-outgoing.t
 test-histedit-templates.t
 test-http-branchmap.t
+test-http-bundle1.t
 test-http-clone-r.t
 test-identify.t
 test-imports-checker.t
--- a/mercurial/url.py	Sat Mar 03 14:24:21 2018 -0500
+++ b/mercurial/url.py	Sat Mar 03 14:28:51 2018 -0500
@@ -67,7 +67,7 @@
                 user, passwd = auth.get('username'), auth.get('password')
                 self.ui.debug("using auth.%s.* for authentication\n" % group)
         if not user or not passwd:
-            u = util.url(authuri)
+            u = util.url(pycompat.bytesurl(authuri))
             u.query = None
             if not self.ui.interactive():
                 raise error.Abort(_('http authorization required for %s') %
@@ -75,7 +75,7 @@
 
             self.ui.write(_("http authorization required for %s\n") %
                           util.hidepassword(bytes(u)))
-            self.ui.write(_("realm: %s\n") % realm)
+            self.ui.write(_("realm: %s\n") % pycompat.bytesurl(realm))
             if user:
                 self.ui.write(_("user: %s\n") % user)
             else:
@@ -424,8 +424,8 @@
         user, pw = self.passwd.find_user_password(
             realm, urllibcompat.getfullurl(req))
         if pw is not None:
-            raw = "%s:%s" % (user, pw)
-            auth = 'Basic %s' % base64.b64encode(raw).strip()
+            raw = "%s:%s" % (pycompat.bytesurl(user), pycompat.bytesurl(pw))
+            auth = r'Basic %s' % pycompat.strurl(base64.b64encode(raw).strip())
             if req.get_header(self.auth_header, None) == auth:
                 return None
             self.auth = auth