# HG changeset patch # User Matt Harbison # Date 1545086685 18000 # Node ID f6987f65435688d62124e7e1cc93f4c9481f6ec5 # Parent ba09db267cb68e54523e64f213d4f1eea50be9ac setup: avoid attempting to invoke the system-wide hg.exe on Windows On Windows, the executable in the current directory gets priority over anything in $PATH (both for cmd.exe and MSYS). That means, the former code was launching the local hg.exe instead of the system-wide one, if it was previously built. If that failed, it then fell back to the local hg code, but run through python.exe. I'm not sure what it is about ef7119cd4965, but that started throwing up a messagebox that python37.dll couldn't be loaded. (And indeed, python37 is not in $PATH by default.) Invoking the local hg via the current python avoids that. diff -r ba09db267cb6 -r f6987f654356 setup.py --- a/setup.py Mon Dec 17 10:46:37 2018 +0100 +++ b/setup.py Mon Dec 17 17:44:45 2018 -0500 @@ -294,14 +294,17 @@ hgenv['LANGUAGE'] = 'C' hgcmd = ['hg'] # Run a simple "hg log" command just to see if using hg from the user's - # path works and can successfully interact with this repository. + # path works and can successfully interact with this repository. Windows + # gives precedence to hg.exe in the current directory, so fall back to the + # python invocation of local hg, where pythonXY.dll can always be found. check_cmd = ['log', '-r.', '-Ttest'] - try: - retcode, out, err = runcmd(hgcmd + check_cmd, hgenv) - except EnvironmentError: - retcode = -1 - if retcode == 0 and not filterhgerr(err): - return hgcommand(hgcmd, hgenv) + if os.name != 'nt': + try: + retcode, out, err = runcmd(hgcmd + check_cmd, hgenv) + except EnvironmentError: + retcode = -1 + if retcode == 0 and not filterhgerr(err): + return hgcommand(hgcmd, hgenv) # Fall back to trying the local hg installation. hgenv = localhgenv()