run-tests: stop writing a `python3` symlink pointing to python2
Having `python3` actually pointing to `python2` is bad. So we stop doing so.
In addition we need to re-introduce a `python` executable since some of the
script really need to be able to say "current python" in their shbang. For
example, `hghave` is one of such script.
The faulty changes where introduced by
c102b704edb5.
Differential Revision: https://phab.mercurial-scm.org/D10943
--- a/tests/dumbhttp.py Tue Jul 06 12:42:32 2021 +0200
+++ b/tests/dumbhttp.py Fri Jul 02 23:09:44 2021 +0200
@@ -1,4 +1,4 @@
-#!/usr/bin/env python3
+#!/usr/bin/env python
from __future__ import absolute_import
--- a/tests/dummysmtpd.py Tue Jul 06 12:42:32 2021 +0200
+++ b/tests/dummysmtpd.py Fri Jul 02 23:09:44 2021 +0200
@@ -1,4 +1,4 @@
-#!/usr/bin/env python3
+#!/usr/bin/env python
"""dummy SMTP server for use in tests"""
--- a/tests/get-with-headers.py Tue Jul 06 12:42:32 2021 +0200
+++ b/tests/get-with-headers.py Fri Jul 02 23:09:44 2021 +0200
@@ -1,4 +1,4 @@
-#!/usr/bin/env python3
+#!/usr/bin/env python
"""This does HTTP GET requests given a host:port and path and returns
a subset of the headers plus the body of the result."""
--- a/tests/hghave Tue Jul 06 12:42:32 2021 +0200
+++ b/tests/hghave Fri Jul 02 23:09:44 2021 +0200
@@ -1,4 +1,4 @@
-#!/usr/bin/env python3
+#!/usr/bin/env python
"""Test the running system for features availability. Exit with zero
if all features are there, non-zero otherwise. If a feature name is
prefixed with "no-", the absence of feature is tested.
--- a/tests/run-tests.py Tue Jul 06 12:42:32 2021 +0200
+++ b/tests/run-tests.py Fri Jul 02 23:09:44 2021 +0200
@@ -3530,9 +3530,11 @@
"""Configure the environment to use the appropriate Python in tests."""
# Tests must use the same interpreter as us or bad things will happen.
if sys.platform == 'win32':
- pyexename = b'python.exe'
+ pyexe_names = [b'python', b'python.exe']
+ elif sys.version_info[0] < 3:
+ pyexe_names = [b'python', b'python2']
else:
- pyexename = b'python3' # XXX this is wrong with python2...
+ pyexe_names = [b'python', b'python3']
# os.symlink() is a thing with py3 on Windows, but it requires
# Administrator rights.
@@ -3540,7 +3542,7 @@
msg = "# Making python executable in test path a symlink to '%s'"
msg %= sysexecutable
vlog(msg)
- for pyexename in [pyexename]:
+ for pyexename in pyexe_names:
mypython = os.path.join(self._tmpbindir, pyexename)
try:
if os.readlink(mypython) == sysexecutable:
@@ -3566,11 +3568,16 @@
with open(osenvironb[b'RUNTESTDIR'] + b'/python3', 'wb') as f:
f.write(b'#!/bin/sh\n')
f.write(b'py -3.%d "$@"\n' % sys.version_info[1])
+ if os.getenv('MSYSTEM'):
+ with open(osenvironb[b'RUNTESTDIR'] + b'/python2', 'wb') as f:
+ f.write(b'#!/bin/sh\n')
+ f.write(b'py -2.%d "$@"\n' % sys.version_info[1])
exedir, exename = os.path.split(sysexecutable)
- msg = "# Modifying search path to find %s as %s in '%s'"
- msg %= (exename, pyexename, exedir)
- vlog(msg)
+ for pyexename in pyexe_names:
+ msg = "# Modifying search path to find %s as %s in '%s'"
+ msg %= (exename, pyexename, exedir)
+ vlog(msg)
path = os.environ['PATH'].split(os.pathsep)
while exedir in path:
path.remove(exedir)
@@ -3598,8 +3605,9 @@
extra_paths.append(scripts_dir)
os.environ['PATH'] = os.pathsep.join(extra_paths + path)
- if not self._findprogram(pyexename):
- print("WARNING: Cannot find %s in search path" % pyexename)
+ for pyexename in pyexe_names:
+ if not self._findprogram(pyexename):
+ print("WARNING: Cannot find %s in search path" % pyexename)
def _installhg(self):
"""Install hg into the test environment.
--- a/tests/test-filelog.py Tue Jul 06 12:42:32 2021 +0200
+++ b/tests/test-filelog.py Fri Jul 02 23:09:44 2021 +0200
@@ -1,4 +1,4 @@
-#!/usr/bin/env python3
+#!/usr/bin/env python
"""
Tests the behavior of filelog w.r.t. data starting with '\1\n'
"""
--- a/tests/test-remotefilelog-datapack.py Tue Jul 06 12:42:32 2021 +0200
+++ b/tests/test-remotefilelog-datapack.py Fri Jul 02 23:09:44 2021 +0200
@@ -1,4 +1,4 @@
-#!/usr/bin/env python3
+#!/usr/bin/env python
from __future__ import absolute_import, print_function
import hashlib
--- a/tests/test-remotefilelog-histpack.py Tue Jul 06 12:42:32 2021 +0200
+++ b/tests/test-remotefilelog-histpack.py Fri Jul 02 23:09:44 2021 +0200
@@ -1,4 +1,4 @@
-#!/usr/bin/env python3
+#!/usr/bin/env python
from __future__ import absolute_import
import hashlib
--- a/tests/test-run-tests.t Tue Jul 06 12:42:32 2021 +0200
+++ b/tests/test-run-tests.t Fri Jul 02 23:09:44 2021 +0200
@@ -2036,3 +2036,34 @@
# Ran 2 tests, 0 skipped, 2 failed.
python hash seed: * (glob)
[1]
+
+Test that a proper "python" has been set up
+===========================================
+
+(with a small check-code work around)
+ $ printf "#!/usr/bi" > test-py3.tmp
+ $ printf "n/en" >> test-py3.tmp
+ $ cat << EOF >> test-py3.tmp
+ > v python3
+ > import sys
+ > print('.'.join(str(x) for x in sys.version_info))
+ > EOF
+ $ mv test-py3.tmp test-py3.py
+ $ chmod +x test-py3.py
+
+(with a small check-code work around)
+ $ printf "#!/usr/bi" > test-py.tmp
+ $ printf "n/en" >> test-py.tmp
+ $ cat << EOF >> test-py.tmp
+ > v python
+ > import sys
+ > print('.'.join(str(x) for x in sys.version_info))
+ > EOF
+ $ mv test-py.tmp test-py.py
+ $ chmod +x test-py.py
+
+ $ ./test-py3.py
+ 3.* (glob)
+ $ ./test-py.py
+ 2.* (glob) (no-py3 !)
+ 3.* (glob) (py3 !)
--- a/tests/test-status-inprocess.py Tue Jul 06 12:42:32 2021 +0200
+++ b/tests/test-status-inprocess.py Fri Jul 02 23:09:44 2021 +0200
@@ -1,4 +1,4 @@
-#!/usr/bin/env python3
+#!/usr/bin/env python
from __future__ import absolute_import, print_function
import sys
--- a/tests/test-stdio.py Tue Jul 06 12:42:32 2021 +0200
+++ b/tests/test-stdio.py Fri Jul 02 23:09:44 2021 +0200
@@ -1,4 +1,4 @@
-#!/usr/bin/env python3
+#!/usr/bin/env python
"""
Tests the buffering behavior of stdio streams in `mercurial.utils.procutil`.
"""
--- a/tests/tinyproxy.py Tue Jul 06 12:42:32 2021 +0200
+++ b/tests/tinyproxy.py Fri Jul 02 23:09:44 2021 +0200
@@ -1,4 +1,4 @@
-#!/usr/bin/env python3
+#!/usr/bin/env python
from __future__ import absolute_import, print_function