[Request] [+ ] D11307: run-tests: avoid silently switching the hg executable used

mharbison72 (Matt Harbison) phabricator at mercurial-scm.org
Wed Aug 18 21:00:38 UTC 2021


mharbison72 created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  I noticed an issue testing the installed pyoxidizer binary using `--with-hg`
  where it would pass more tests than if the tests are run with `--pyoxidized`.
  It turns out that `_usecorrectpython()` augments `PATH` to include the python
  binary and its `Scripts` directory on Windows, and I happen to have `pip`
  installed Mercurial in that version of python.  Therefore, the `which()` method
  picked up this installed executable, and wrote that to the generated `hg` script
  in the custom `bin` directory.
  
  There's an issue here when running `test-run-tests.t` with `--local`, as noted
  in the comments.  I suspect that some stuff from the main instance of
  `run-tests.py` is bleeding into the *.t file's instances of `run-tests.py`
  because when I print `opts.with_hg` at the point where is complains that
  "--with-hg must specify an executable hg script", the path is in the form
  "C:\\\\Users\\\\Matt\\\\...".  (Two of those slashes are escapes the test runner
  puts into printed lines.)  If I hardcode r"C:\Users\Matt\..." in `run-tests.py`,
  then it works fine.

REPOSITORY
  rHG Mercurial

BRANCH
  stable

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

AFFECTED FILES
  tests/run-tests.py

CHANGE DETAILS

diff --git a/tests/run-tests.py b/tests/run-tests.py
--- a/tests/run-tests.py
+++ b/tests/run-tests.py
@@ -3679,8 +3679,19 @@
     def _use_correct_mercurial(self):
         target_exec = os.path.join(self._custom_bin_dir, b'hg')
         if self._hgcommand != b'hg':
-            # shutil.which only accept bytes from 3.8
-            real_exec = which(self._hgcommand)
+            # _usecorrectpython() may have augmented PATH, so don't used `which`
+            # on the basename of the explicitly provided executable, since that
+            # may end up using another one.
+            #
+            # TODO: figure how why test-run-tests.t fails on Windows if we
+            #  unconditionally join with bindir, and run with --local.  Not
+            #  using --local will run the *.t fine.
+            if self.options.with_hg:
+                real_exec = os.path.join(self._bindir, self._hgcommand)
+            else:
+                # shutil.which only accept bytes from 3.8
+                real_exec = which(self._hgcommand)
+
             if real_exec is None:
                 raise ValueError('could not find exec path for "%s"', real_exec)
             if real_exec == target_exec:



To: mharbison72, #hg-reviewers
Cc: mercurial-patches, mercurial-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mercurial-scm.org/pipermail/mercurial-patches/attachments/20210818/31ed0a18/attachment-0001.html>


More information about the Mercurial-patches mailing list