run-tests: stop ignoring venv-installed packages
This will allow test dependencies to be installed within a venv, instead of
tampering with sys/user sites. One thing to note here is that the `VIRTUAL_ENV`
path takes precedence over system-site, unlike when run directly with an
activated `venv`. For example, `sys.path` as viewed from a feature test in
`hghave.py`, when running `hghave vcr` directly with an activated `venv`:
sys.path: [
'/home/jenkins/hg-committed/tests',
'/usr/lib/python38.zip',
'/usr/lib/python3.8',
'/usr/lib/python3.8/lib-dynload',
'/home/jenkins/test_venv/lib/python3.8/site-packages'
]
vs `sys.path` from the same feature test, when run by `run-tests.py` with this
change:
sys.path: [
'/home/jenkins/hg-committed/tests',
'/home/jenkins/hg-committed',
'/home/jenkins/hg-committed/tests',
'/home/jenkins/test_venv/lib/python3.8/site-packages',
'/usr/lib/python38.zip',
'/usr/lib/python3.8',
'/usr/lib/python3.8/lib-dynload',
'/home/jenkins/.local/lib/python3.8/site-packages',
'/usr/local/lib/python3.8/dist-packages',
'/usr/lib/python3/dist-packages'
]
--- a/tests/run-tests.py Mon Jan 30 16:59:15 2023 -0500
+++ b/tests/run-tests.py Fri Feb 03 17:31:54 2023 -0500
@@ -3252,6 +3252,18 @@
# adds an extension to HGRC. Also include run-test.py directory to
# import modules like heredoctest.
pypath = [self._pythondir, self._testdir, runtestdir]
+
+ # Setting PYTHONPATH with an activated venv causes the modules installed
+ # in it to be ignored. Therefore, include the related paths in sys.path
+ # in PYTHONPATH.
+ virtual_env = osenvironb.get(b"VIRTUAL_ENV")
+ if virtual_env:
+ virtual_env = os.path.join(virtual_env, b'')
+ for p in sys.path:
+ p = _sys2bytes(p)
+ if p.startswith(virtual_env):
+ pypath.append(p)
+
# We have to augment PYTHONPATH, rather than simply replacing
# it, in case external libraries are only available via current
# PYTHONPATH. (In particular, the Subversion bindings on OS X