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

login
register
mail settings
Submitter phabricator
Date Oct. 12, 2017, 12:57 a.m.
Message ID <differential-rev-PHID-DREV-ilcx546ka6vqfwmlzc2p-req@phab.mercurial-scm.org>
Download mbox | patch
Permalink /patch/24762/
State Superseded
Headers show

Comments

phabricator - Oct. 12, 2017, 12:57 a.m.
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




To: quark, #hg-reviewers
Cc: mercurial-devel
phabricator - Oct. 12, 2017, 9:06 a.m.
lothiraldan accepted this revision.
lothiraldan added a comment.


  Too bad https://docs.python.org/2/library/platform.html?highlight=python_implementation#platform.python_implementation is not available in all jython version

REPOSITORY
  rHG Mercurial

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

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

Patch

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