D1018: selectors2: do not use platform.system()

quark (Jun Wu) phabricator at mercurial-scm.org
Thu Oct 12 00:57:40 UTC 2017


quark created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  `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.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D1018

AFFECTED FILES
  mercurial/pycompat.py
  mercurial/selectors2.py

CHANGE DETAILS

diff --git a/mercurial/selectors2.py b/mercurial/selectors2.py
--- a/mercurial/selectors2.py
+++ b/mercurial/selectors2.py
@@ -29,12 +29,13 @@
 import collections
 import errno
 import math
-import platform
 import select
 import socket
 import sys
 import time
 
+from mercurial import pycompat
+
 namedtuple = collections.namedtuple
 Mapping = collections.Mapping
 
@@ -64,7 +65,6 @@
 
 SelectorKey = namedtuple('SelectorKey', ['fileobj', 'fd', 'events', 'data'])
 
-
 class _SelectorMapping(Mapping):
     """ Mapping of file objects to selector keys """
 
@@ -288,7 +288,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 +727,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
diff --git a/mercurial/pycompat.py b/mercurial/pycompat.py
--- a/mercurial/pycompat.py
+++ b/mercurial/pycompat.py
@@ -17,6 +17,7 @@
 
 ispy3 = (sys.version_info[0] >= 3)
 ispypy = (r'__pypy__' in sys.builtin_module_names)
+isjython = sys.platform.startswith(r'java')
 
 if not ispy3:
     import cookielib



To: quark, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list