Re: [PATCH STABLE] setup: only allow Python 3 from a source checkout (issue5804)

2018-02-23 Thread Yuya Nishihara
On Fri, 23 Feb 2018 18:02:20 -0800, Gregory Szorc wrote:
> # HG changeset patch
> # User Gregory Szorc 
> # Date 1519437424 28800
> #  Fri Feb 23 17:57:04 2018 -0800
> # Branch stable
> # Node ID 5b80235fd920c02ff430d8b0989fc55a58f11a0c
> # Parent  5da7b8cb6f751fa7a331ed501d26f336e1bbc8f9
> setup: only allow Python 3 from a source checkout (issue5804)

Queued for stable, thanks.
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


[PATCH STABLE] setup: only allow Python 3 from a source checkout (issue5804)

2018-02-23 Thread Gregory Szorc
# HG changeset patch
# User Gregory Szorc 
# Date 1519437424 28800
#  Fri Feb 23 17:57:04 2018 -0800
# Branch stable
# Node ID 5b80235fd920c02ff430d8b0989fc55a58f11a0c
# Parent  5da7b8cb6f751fa7a331ed501d26f336e1bbc8f9
setup: only allow Python 3 from a source checkout (issue5804)

People are running `pip install Mercurial` with Python 3 and that
is working because not everything performs a Python version
compatibility check.

Modern versions of pip do recognize the "python_requires" keyword
(https://packaging.python.org/tutorials/distributing-packages/#python-requires)
which we set if using setuptools. But this isn't set nor recognized
everywhere.

To prevent people from accidentally installing Mercurial with Python
3 until Python 3 is officially supported, have setup.py fail when
run with Python 3. But don't fail if we're running from a source
checkout, as we don't want to anger Mercurial developers hacking
on Python 3 nor Mercurial's test automation running from source
checkouts. People running setup.py from source checkouts could still
fall through a Python 3 crack. But at least the
`pip install Mercurial` attempt will get nipped in the bud.

diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -67,6 +67,26 @@ Python {py} detected.
 printf(error, file=sys.stderr)
 sys.exit(1)
 
+# We don't yet officially support Python 3. But we want to allow developers to
+# hack on. Detect and disallow running on Python 3 by default. But provide a
+# backdoor to enable working on Python 3.
+if sys.version_info[0] != 2:
+badpython = True
+
+# Allow Python 3 from source checkouts.
+if os.path.isdir('.hg'):
+badpython = False
+
+if badpython:
+error = """
+Mercurial only supports Python 2.7.
+Python {py} detected.
+Please re-run with Python 2.7.
+""".format(py=sys.version_info)
+
+printf(error, file=sys.stderr)
+sys.exit(1)
+
 # Solaris Python packaging brain damage
 try:
 import hashlib
___
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel