Patchwork D2450: util: handle fileno() on Python 3 throwing io.UnsupportedOperation

login
register
mail settings
Submitter phabricator
Date Feb. 26, 2018, 6:02 a.m.
Message ID <differential-rev-PHID-DREV-zagtgviabsyub54kb56i-req@phab.mercurial-scm.org>
Download mbox | patch
Permalink /patch/28384/
State Superseded
Headers show

Comments

phabricator - Feb. 26, 2018, 6:02 a.m.
durin42 created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  Fortunately, the exception exists on Python 2 so we don't have to do
  something weirder than this.

REPOSITORY
  rHG Mercurial

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

AFFECTED FILES
  mercurial/util.py

CHANGE DETAILS




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

Patch

diff --git a/mercurial/util.py b/mercurial/util.py
--- a/mercurial/util.py
+++ b/mercurial/util.py
@@ -26,6 +26,7 @@ 
 import gc
 import hashlib
 import imp
+import io
 import itertools
 import mmap
 import os
@@ -1178,7 +1179,10 @@ 
 
 def _isstdout(f):
     fileno = getattr(f, 'fileno', None)
-    return fileno and fileno() == sys.__stdout__.fileno()
+    try:
+        return fileno and fileno() == sys.__stdout__.fileno()
+    except io.UnsupportedOperation:
+        return False # fileno() raised UnsupportedOperation
 
 def shellenviron(environ=None):
     """return environ with optional override, useful for shelling out"""