Mercurial > hg
changeset 47560:af633293a5bd
windows: replicate the normalizing behavior of os.environ
On Windows, `os.environ` normalizes environment variables to uppercase. Our
current bytes-based environ substitution object is a simple dict, so we add
the normalization behavior.
This fixes test-http-peer.t on Windows.
Differential Revision: https://phab.mercurial-scm.org/D10998
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Thu, 08 Jul 2021 15:55:15 +0200 |
parents | 53a864a60281 |
children | 8e9295912573 |
files | mercurial/encoding.py |
diffstat | 1 files changed, 13 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/encoding.py Thu Jul 08 15:55:04 2021 +0200 +++ b/mercurial/encoding.py Thu Jul 08 15:55:15 2021 +0200 @@ -338,10 +338,19 @@ if not _nativeenviron: # now encoding and helper functions are available, recreate the environ # dict to be exported to other modules - environ = { - tolocal(k.encode('utf-8')): tolocal(v.encode('utf-8')) - for k, v in os.environ.items() # re-exports - } + if pycompat.iswindows and pycompat.ispy3: + + class WindowsEnviron(dict): + """`os.environ` normalizes environment variables to uppercase on windows""" + + def get(self, key, default=None): + return super().get(upper(key), default) + + environ = WindowsEnviron() + + for k, v in os.environ.items(): # re-exports + environ[tolocal(k.encode('utf-8'))] = tolocal(v.encode('utf-8')) + if pycompat.ispy3: # os.getcwd() on Python 3 returns string, but it has os.getcwdb() which