Mercurial > hg
changeset 49518:805419729e11 stable
windows: gracefully handle when the username cannot be determined
This assumes implementation details, but I don't see any other way than to check
the environment variables ourselves (which would miss out on any future
enhancements that Python may make). This was originally reported as
https://foss.heptapod.net/mercurial/tortoisehg/thg/-/issues/5835.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Mon, 10 Oct 2022 11:28:19 -0400 |
parents | f0a3aaa07d6a |
children | a5f551f8b723 |
files | mercurial/windows.py tests/test-issue1102.t |
diffstat | 2 files changed, 21 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/windows.py Tue Oct 04 14:33:31 2022 +0200 +++ b/mercurial/windows.py Mon Oct 10 11:28:19 2022 -0400 @@ -581,7 +581,13 @@ If uid is None, return the name of the current user.""" if not uid: - return pycompat.fsencode(getpass.getuser()) + try: + return pycompat.fsencode(getpass.getuser()) + except ModuleNotFoundError: + # getpass.getuser() checks for a few environment variables first, + # but if those aren't set, imports pwd and calls getpwuid(), none of + # which exists on Windows. + pass return None
--- a/tests/test-issue1102.t Tue Oct 04 14:33:31 2022 +0200 +++ b/tests/test-issue1102.t Mon Oct 10 11:28:19 2022 -0400 @@ -14,4 +14,18 @@ tip 3:a49829c4fc11 t1 0:f7b1eb17ad24 +Ensure that the username access fails gracefully if assumptions about the +environment made by python do not hold. + +#if windows + >>> import os + >>> from mercurial import util + >>> os.environ.pop('LOGNAME', None) and None + >>> os.environ.pop('USER', None) and None + >>> os.environ.pop('LNAME', None) and None + >>> os.environ.pop('USERNAME', None) and None + >>> print(util.username()) + None +#endif + $ cd ..