diff --git a/tests/hghave.py b/tests/hghave.py --- a/tests/hghave.py +++ b/tests/hghave.py @@ -140,9 +140,22 @@ """Return the match object if cmd executes successfully and its output is matched by the supplied regular expression. """ + + # Tests on Windows have to fake USERPROFILE to point to the test area so + # that `~` is properly expanded on py3.8+. However, some tools like black + # make calls that need the real USERPROFILE in order to run `foo --version`. + env = os.environ + if os.name == 'nt': + env = os.environ.copy() + env['USERPROFILE'] = env['REALUSERPROFILE'] + r = re.compile(regexp) p = subprocess.Popen( - cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT + cmd, + shell=True, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + env=env, ) s = p.communicate()[0] ret = p.returncode diff --git a/tests/run-tests.py b/tests/run-tests.py --- a/tests/run-tests.py +++ b/tests/run-tests.py @@ -1371,6 +1371,7 @@ env['TESTNAME'] = self.name env['HOME'] = _bytes2sys(self._testtmp) if os.name == 'nt': + env['REALUSERPROFILE'] = env['USERPROFILE'] # py3.8+ ignores HOME: https://bugs.python.org/issue36264 env['USERPROFILE'] = env['HOME'] formated_timeout = _bytes2sys(b"%d" % default_defaults['timeout'][1]) diff --git a/tests/test-check-format.t b/tests/test-check-format.t --- a/tests/test-check-format.t +++ b/tests/test-check-format.t @@ -1,5 +1,11 @@ #require black test-repo +Black needs the real USERPROFILE in order to run on Windows +#if msys + $ USERPROFILE="$REALUSERPROFILE" + $ export USERPROFILE +#endif + $ cd $RUNTESTDIR/.. $ black --check --diff `hg files 'set:(**.py + grep("^#!.*python")) - mercurial/thirdparty/**'`