changeset 34639:a568a46751b6

selectors2: do not use platform.system() `platform.system()` may have a side effect spawning a shell executing `uname -p`, which may print a warning when the current directory is removed: shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory This patch changes selectors2 to test the `sys.platform` string, which is a much safer way to detect Jython. Jython's `sys.platform` looks like this: Jython 2.7.1 (default:0df7adb1b397, Jun 30 2017, 19:02:43) [OpenJDK 64-Bit Server VM (Oracle Corporation)] on java1.8.0_144 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.platform 'java1.8.0_144 ( ==linux2 for targets )' Differential Revision: https://phab.mercurial-scm.org/D1018
author Jun Wu <quark@fb.com>
date Wed, 11 Oct 2017 17:27:21 -0700
parents 021607b4ef49
children 68ed3b4f86ef
files mercurial/pycompat.py mercurial/selectors2.py
diffstat 2 files changed, 6 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/pycompat.py	Mon Oct 09 12:42:28 2017 -0700
+++ b/mercurial/pycompat.py	Wed Oct 11 17:27:21 2017 -0700
@@ -314,3 +314,5 @@
     stringio = cStringIO.StringIO
     maplist = map
     rawinput = raw_input
+
+isjython = sysplatform.startswith('java')
--- a/mercurial/selectors2.py	Mon Oct 09 12:42:28 2017 -0700
+++ b/mercurial/selectors2.py	Wed Oct 11 17:27:21 2017 -0700
@@ -29,12 +29,13 @@
 import collections
 import errno
 import math
-import platform
 import select
 import socket
 import sys
 import time
 
+from . import pycompat
+
 namedtuple = collections.namedtuple
 Mapping = collections.Mapping
 
@@ -288,7 +289,7 @@
     __all__.append('SelectSelector')
 
     # Jython has a different implementation of .fileno() for socket objects.
-    if platform.system() == 'Java':
+    if pycompat.isjython:
         class _JythonSelectorMapping(object):
             """ This is an implementation of _SelectorMapping that is built
             for use specifically with Jython, which does not provide a hashable
@@ -727,7 +728,7 @@
     by eventlet, greenlet, and preserve proper behavior. """
     global _DEFAULT_SELECTOR
     if _DEFAULT_SELECTOR is None:
-        if platform.system() == 'Java':  # Platform-specific: Jython
+        if pycompat.isjython:
             _DEFAULT_SELECTOR = JythonSelectSelector
         elif _can_allocate('kqueue'):
             _DEFAULT_SELECTOR = KqueueSelector