Mercurial > hg
comparison mercurial/debugcommands.py @ 45929:87e7dd8e7734
ui: ensure `getpass()` returns bytes
Previously, this could return either bytes or str. I'm not sure which direction
we should go in, but since the input is bytes, I guess bytes makes sense as
output. `debuguigetpass` crashed because it assumed bytes would be returned,
`sslcontext.load_cert_chain()` is happy with bytes or str if the type info in
PyCharm is correct, and `smtplib.SMTP.login()` wants str.
I couldn't figure out how to test this, because the test stalls for input with
`echo test | hg debuguigetpass --config ui.interactive=1`, likely because it
drains stdin before prompting. The custom input reading with `ui.nontty=1` does
not.
I'm also a bit concerned with all of this encoding/decoding. The existing code
in the mail module uses `encoding.strfromlocal()`, but the username and password
are ascii encoded/decoded in `mercurial.url.passwordmgr.find_user_password()`
with `pycompat.{str,bytes}url()`. I'm not sure if this inconsistency could
cause subtle compatability issues.
Differential Revision: https://phab.mercurial-scm.org/D9375
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Mon, 23 Nov 2020 11:47:06 -0500 |
parents | 1a72e4839795 |
children | 89a2afe31e82 |
comparison
equal
deleted
inserted
replaced
45928:62329b759635 | 45929:87e7dd8e7734 |
---|---|
3790 norepo=True, | 3790 norepo=True, |
3791 ) | 3791 ) |
3792 def debuguigetpass(ui, prompt=b''): | 3792 def debuguigetpass(ui, prompt=b''): |
3793 """show prompt to type password""" | 3793 """show prompt to type password""" |
3794 r = ui.getpass(prompt) | 3794 r = ui.getpass(prompt) |
3795 if r is not None: | |
3796 r = encoding.strtolocal(r) | |
3797 else: | |
3798 r = b"<default response>" | |
3795 ui.writenoi18n(b'response: %s\n' % r) | 3799 ui.writenoi18n(b'response: %s\n' % r) |
3796 | 3800 |
3797 | 3801 |
3798 @command( | 3802 @command( |
3799 b'debuguiprompt', | 3803 b'debuguiprompt', |