Comments
Patch
@@ -96,6 +96,13 @@ class passwordmgr(object):
if not passwd:
passwd = self.ui.getpass()
+ # As of Python 3.8, the default implementation of
+ # AbstractBasicAuthHandler.retry_http_basic_auth() assumes the user
+ # is set if pw is not None. This means (None, str) is not a valid
+ # return type of find_user_password().
+ if user is None:
+ return None, None
+
self.passwddb.add_password(realm, authuri, user, passwd)
self._writedebug(user, passwd)
return (pycompat.strurl(user), pycompat.strurl(passwd))
@@ -192,6 +192,34 @@ test http authentication
$ hg id http://localhost:$HGPORT2/
abort: http authorization required for http://localhost:$HGPORT2/
[255]
+ $ hg id --config ui.interactive=true --debug http://localhost:$HGPORT2/
+ using http://localhost:$HGPORT2/
+ sending capabilities command
+ http authorization required for http://localhost:$HGPORT2/
+ realm: mercurial
+ user: abort: response expected
+ [255]
+ $ cat <<'EOF' | hg id --config ui.interactive=true --config ui.nontty=true --debug http://localhost:$HGPORT2/
+ >
+ > EOF
+ using http://localhost:$HGPORT2/
+ sending capabilities command
+ http authorization required for http://localhost:$HGPORT2/
+ realm: mercurial
+ user:
+ password: abort: response expected
+ [255]
+ $ cat <<'EOF' | hg id --config ui.interactive=true --config ui.nontty=true --debug http://localhost:$HGPORT2/
+ >
+ >
+ > EOF
+ using http://localhost:$HGPORT2/
+ sending capabilities command
+ http authorization required for http://localhost:$HGPORT2/
+ realm: mercurial
+ user:
+ password: abort: authorization failed
+ [255]
$ hg id --config ui.interactive=true --config extensions.getpass=get_pass.py http://user@localhost:$HGPORT2/
http authorization required for http://localhost:$HGPORT2/
realm: mercurial
@@ -360,6 +388,9 @@ test http authentication
"GET /?cmd=capabilities HTTP/1.1" 401 -
"GET /?cmd=capabilities HTTP/1.1" 401 -
"GET /?cmd=capabilities HTTP/1.1" 401 -
+ "GET /?cmd=capabilities HTTP/1.1" 401 -
+ "GET /?cmd=capabilities HTTP/1.1" 401 -
+ "GET /?cmd=capabilities HTTP/1.1" 401 -
"GET /?cmd=capabilities HTTP/1.1" 200 -
"GET /?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=tip x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull
"GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=namespaces x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull