Patchwork D8038: setup: don't skip the search for global hg.exe if there is no local instance

login
register
mail settings
Submitter phabricator
Date Jan. 29, 2020, 5:29 a.m.
Message ID <differential-rev-PHID-DREV-obm4rwkvlecceokq5eso-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/44735/
State Superseded
Headers show

Comments

phabricator - Jan. 29, 2020, 5:29 a.m.
mharbison72 created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  The point of trying not to blindly execute `hg` on Windows is that the local
  hg.exe would be given precedence, and if py3 isn't on PATH, it errors out with a
  modal dialog.  But that's not a problem if there is no local executable that
  could be run.
  
  The problem that I recently ran into was I upgraded the repo format to use zstd.
  But doing a `make clean` deletes all of the supporting libraries, causing the
  next run to abort with a message about not understanding the
  `revlog-compression-zstd` requirement.  By getting rid of the local executable
  in the previous commit when cleaning, we avoid leaving a broken executable
  around, and avoid the py3 PATH problem too.  There is still a small hole in that
  `hg.exe` needs to be deleted before switching between py2/py3/PyOxidizer builds,
  because the zstd module won't load.  But that seems like good hygiene anyway.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D8038

AFFECTED FILES
  setup.py

CHANGE DETAILS




To: mharbison72, #hg-reviewers
Cc: mercurial-devel

Patch

diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -323,7 +323,7 @@ 
     # 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']
-    if os.name != 'nt':
+    if os.name != 'nt' or not os.path.exists("hg.exe"):
         try:
             retcode, out, err = runcmd(hgcmd + check_cmd, hgenv)
         except EnvironmentError: