Mercurial > hg-stable
changeset 46319:3dfebba99ef6
windows: wrap `os.getcwd()` in `os.path.realpath()` on py3
I noticed various `test-check-*` failures that were printing absolute paths
when repo relative paths were expected. This was due to the drive letter in
`repo.root` being uppercased as it is run through `os.path.realpath()`, and then
the simple string comparison against the (lowercased) `_cwd` member of dirstate
in `dirstate.getcwd()` causing an absolute path to be returned, instead of the
expected `b''`. That in turn causes `scmutil.getuipathfn()` to wrongly use
`repo.pathto()` with an absolute cwd path.
.
Differential Revision: https://phab.mercurial-scm.org/D9806
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Wed, 09 Dec 2020 00:51:35 -0500 |
parents | e74274fc1b35 |
children | ef771d329961 |
files | mercurial/encoding.py |
diffstat | 1 files changed, 6 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/encoding.py Tue Dec 01 21:51:41 2020 -0500 +++ b/mercurial/encoding.py Wed Dec 09 00:51:35 2020 -0500 @@ -298,7 +298,12 @@ if pycompat.iswindows: # Python 3 on Windows issues a DeprecationWarning about using the bytes # API when os.getcwdb() is called. - getcwd = lambda: strtolocal(os.getcwd()) # re-exports + # + # Additionally, py3.8+ uppercases the drive letter when calling + # os.path.realpath(), which is used on ``repo.root``. Since those + # strings are compared in various places as simple strings, also call + # realpath here. See https://bugs.python.org/issue40368 + getcwd = lambda: strtolocal(os.path.realpath(os.getcwd())) # re-exports else: getcwd = os.getcwdb # re-exports else: