run-tests: stop writing a `python3` symlink pointing to python2
authorPierre-Yves David <pierre-yves.david@octobus.net>
Fri, 02 Jul 2021 23:09:44 +0200
changeset 47500 23f5ed6dbcb1
parent 47499 9b1710c50230
child 47501 8b7e47802deb
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
tests/dumbhttp.py
tests/dummysmtpd.py
tests/get-with-headers.py
tests/hghave
tests/run-tests.py
tests/test-filelog.py
tests/test-remotefilelog-datapack.py
tests/test-remotefilelog-histpack.py
tests/test-run-tests.t
tests/test-status-inprocess.py
tests/test-stdio.py
tests/tinyproxy.py
--- 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