[PATCH 4 of 5 RESEND] py3: bulk replace sys.stdin/out/err by util's
Yuya Nishihara
yuya at tcha.org
Fri Nov 11 10:50:23 EST 2016
# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1476975216 -32400
# Thu Oct 20 23:53:36 2016 +0900
# Node ID dc7445f35ec687e372f9d27bbbb9bb4c5f0d1641
# Parent 881654b85952ee9d7fa8e511ef1de63166f31211
py3: bulk replace sys.stdin/out/err by util's
Almost all sys.stdin/out/err in hgext/ and mercurial/ are replaced by util's.
There are a few exceptions:
- lsprof.py and statprof.py are untouched since they are a kind of vendor
code and they never import mercurial modules right now.
- ui._readline() needs to replace sys.stdin and stdout to pass them to
raw_input(). We'll need another workaround here.
diff --git a/hgext/chgserver.py b/hgext/chgserver.py
--- a/hgext/chgserver.py
+++ b/hgext/chgserver.py
@@ -232,7 +232,7 @@ def _newchgui(srcui, csystem):
# these situations and will behave differently (write to stdout).
if (any(s[1] for s in self._bufferstates)
or not util.safehasattr(self.fout, 'fileno')
- or self.fout.fileno() != sys.stdout.fileno()):
+ or self.fout.fileno() != util.stdout.fileno()):
return super(chgui, self).system(cmd, environ, cwd, onerr,
errprefix)
# copied from mercurial/util.py:system()
diff --git a/hgext/pager.py b/hgext/pager.py
--- a/hgext/pager.py
+++ b/hgext/pager.py
@@ -84,19 +84,19 @@ testedwith = 'ships-with-hg-core'
def _runpager(ui, p):
pager = subprocess.Popen(p, shell=True, bufsize=-1,
close_fds=util.closefds, stdin=subprocess.PIPE,
- stdout=sys.stdout, stderr=sys.stderr)
+ stdout=util.stdout, stderr=util.stderr)
# back up original file objects and descriptors
olduifout = ui.fout
- oldstdout = sys.stdout
- stdoutfd = os.dup(sys.stdout.fileno())
- stderrfd = os.dup(sys.stderr.fileno())
+ oldstdout = util.stdout
+ stdoutfd = os.dup(util.stdout.fileno())
+ stderrfd = os.dup(util.stderr.fileno())
# create new line-buffered stdout so that output can show up immediately
- ui.fout = sys.stdout = newstdout = os.fdopen(sys.stdout.fileno(), 'wb', 1)
- os.dup2(pager.stdin.fileno(), sys.stdout.fileno())
- if ui._isatty(sys.stderr):
- os.dup2(pager.stdin.fileno(), sys.stderr.fileno())
+ ui.fout = util.stdout = newstdout = os.fdopen(util.stdout.fileno(), 'wb', 1)
+ os.dup2(pager.stdin.fileno(), util.stdout.fileno())
+ if ui._isatty(util.stderr):
+ os.dup2(pager.stdin.fileno(), util.stderr.fileno())
@atexit.register
def killpager():
@@ -104,13 +104,13 @@ def _runpager(ui, p):
signal.signal(signal.SIGINT, signal.SIG_IGN)
pager.stdin.close()
ui.fout = olduifout
- sys.stdout = oldstdout
+ util.stdout = oldstdout
# close new stdout while it's associated with pager; otherwise stdout
# fd would be closed when newstdout is deleted
newstdout.close()
# restore original fds: stdout is open again
- os.dup2(stdoutfd, sys.stdout.fileno())
- os.dup2(stderrfd, sys.stderr.fileno())
+ os.dup2(stdoutfd, util.stdout.fileno())
+ os.dup2(stderrfd, util.stderr.fileno())
pager.wait()
def uisetup(ui):
diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -888,8 +888,8 @@ def service(opts, parentfn=None, initfn=
raise error.Abort(_('invalid value for --daemon-postexec: %s')
% inst)
util.hidewindow()
- sys.stdout.flush()
- sys.stderr.flush()
+ util.stdout.flush()
+ util.stderr.flush()
nullfd = os.open(os.devnull, os.O_RDWR)
logfilefd = nullfd
diff --git a/mercurial/commandserver.py b/mercurial/commandserver.py
--- a/mercurial/commandserver.py
+++ b/mercurial/commandserver.py
@@ -15,7 +15,6 @@ import select
import signal
import socket
import struct
-import sys
import traceback
from .i18n import _
@@ -304,8 +303,8 @@ def _protectio(ui):
ui.flush()
newfiles = []
nullfd = os.open(os.devnull, os.O_RDWR)
- for f, sysf, mode in [(ui.fin, sys.stdin, 'rb'),
- (ui.fout, sys.stdout, 'wb')]:
+ for f, sysf, mode in [(ui.fin, util.stdin, 'rb'),
+ (ui.fout, util.stdout, 'wb')]:
if f is sysf:
newfd = os.dup(f.fileno())
os.dup2(nullfd, f.fileno())
diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py
--- a/mercurial/dispatch.py
+++ b/mercurial/dispatch.py
@@ -95,7 +95,7 @@ def dispatch(req):
elif req.ui:
ferr = req.ui.ferr
else:
- ferr = sys.stderr
+ ferr = util.stderr
try:
if not req.ui:
diff --git a/mercurial/hgweb/wsgicgi.py b/mercurial/hgweb/wsgicgi.py
--- a/mercurial/hgweb/wsgicgi.py
+++ b/mercurial/hgweb/wsgicgi.py
@@ -11,7 +11,6 @@
from __future__ import absolute_import
import os
-import sys
from .. import (
util,
@@ -22,8 +21,8 @@ from . import (
)
def launch(application):
- util.setbinary(sys.stdin)
- util.setbinary(sys.stdout)
+ util.setbinary(util.stdin)
+ util.setbinary(util.stdout)
environ = dict(os.environ.iteritems())
environ.setdefault('PATH_INFO', '')
@@ -33,12 +32,12 @@ def launch(application):
if environ['PATH_INFO'].startswith(scriptname):
environ['PATH_INFO'] = environ['PATH_INFO'][len(scriptname):]
- stdin = sys.stdin
+ stdin = util.stdin
if environ.get('HTTP_EXPECT', '').lower() == '100-continue':
- stdin = common.continuereader(stdin, sys.stdout.write)
+ stdin = common.continuereader(stdin, util.stdout.write)
environ['wsgi.input'] = stdin
- environ['wsgi.errors'] = sys.stderr
+ environ['wsgi.errors'] = util.stderr
environ['wsgi.version'] = (1, 0)
environ['wsgi.multithread'] = False
environ['wsgi.multiprocess'] = True
@@ -51,7 +50,7 @@ def launch(application):
headers_set = []
headers_sent = []
- out = sys.stdout
+ out = util.stdout
def write(data):
if not headers_set:
diff --git a/mercurial/hook.py b/mercurial/hook.py
--- a/mercurial/hook.py
+++ b/mercurial/hook.py
@@ -209,11 +209,11 @@ def runhooks(ui, repo, name, hooks, thro
for hname, cmd in hooks:
if oldstdout == -1 and _redirect:
try:
- stdoutno = sys.stdout.fileno()
- stderrno = sys.stderr.fileno()
+ stdoutno = util.stdout.fileno()
+ stderrno = util.stderr.fileno()
# temporarily redirect stdout to stderr, if possible
if stdoutno >= 0 and stderrno >= 0:
- sys.stdout.flush()
+ util.stdout.flush()
oldstdout = os.dup(stdoutno)
os.dup2(stderrno, stdoutno)
except (OSError, AttributeError):
@@ -255,10 +255,10 @@ def runhooks(ui, repo, name, hooks, thro
# The stderr is fully buffered on Windows when connected to a pipe.
# A forcible flush is required to make small stderr data in the
# remote side available to the client immediately.
- sys.stderr.flush()
+ util.stderr.flush()
finally:
if _redirect and oldstdout >= 0:
- sys.stdout.flush() # write hook output to stderr fd
+ util.stdout.flush() # write hook output to stderr fd
os.dup2(oldstdout, stdoutno)
os.close(oldstdout)
diff --git a/mercurial/keepalive.py b/mercurial/keepalive.py
--- a/mercurial/keepalive.py
+++ b/mercurial/keepalive.py
@@ -661,14 +661,14 @@ def continuity(url):
def comp(N, url):
print(' making %i connections to:\n %s' % (N, url))
- sys.stdout.write(' first using the normal urllib handlers')
+ util.stdout.write(' first using the normal urllib handlers')
# first use normal opener
opener = urlreq.buildopener()
urlreq.installopener(opener)
t1 = fetch(N, url)
print(' TIME: %.3f s' % t1)
- sys.stdout.write(' now using the keepalive handler ')
+ util.stdout.write(' now using the keepalive handler ')
# now install the keepalive handler and try again
opener = urlreq.buildopener(HTTPHandler())
urlreq.installopener(opener)
@@ -713,11 +713,11 @@ def test_timeout(url):
i = 20
print(" waiting %i seconds for the server to close the connection" % i)
while i > 0:
- sys.stdout.write('\r %2i' % i)
- sys.stdout.flush()
+ util.stdout.write('\r %2i' % i)
+ util.stdout.flush()
time.sleep(1)
i -= 1
- sys.stderr.write('\r')
+ util.stderr.write('\r')
print(" fetching the file a second time")
fo = urlreq.urlopen(url)
diff --git a/mercurial/ui.py b/mercurial/ui.py
--- a/mercurial/ui.py
+++ b/mercurial/ui.py
@@ -130,9 +130,9 @@ class ui(object):
self.httppasswordmgrdb = src.httppasswordmgrdb
else:
- self.fout = sys.stdout
- self.ferr = sys.stderr
- self.fin = sys.stdin
+ self.fout = util.stdout
+ self.ferr = util.stderr
+ self.fin = util.stdin
# shared read-only environment
self.environ = os.environ
diff --git a/mercurial/util.py b/mercurial/util.py
--- a/mercurial/util.py
+++ b/mercurial/util.py
@@ -984,7 +984,7 @@ def system(cmd, environ=None, cwd=None,
if environ is None:
environ = {}
try:
- sys.stdout.flush()
+ stdout.flush()
except Exception:
pass
def py2shell(val):
@@ -2667,9 +2667,9 @@ def timed(func):
finally:
elapsed = time.time() - start
_timenesting[0] -= indent
- sys.stderr.write('%s%s: %s\n' %
- (' ' * _timenesting[0], func.__name__,
- timecount(elapsed)))
+ stderr.write('%s%s: %s\n' %
+ (' ' * _timenesting[0], func.__name__,
+ timecount(elapsed)))
return wrapper
_sizeunits = (('m', 2**20), ('k', 2**10), ('g', 2**30),
@@ -2734,7 +2734,7 @@ def getstackframes(skip=0, line=' %-*s i
else:
yield line % (fnmax, fnln, func)
-def debugstacktrace(msg='stacktrace', skip=0, f=sys.stderr, otherf=sys.stdout):
+def debugstacktrace(msg='stacktrace', skip=0, f=stderr, otherf=stdout):
'''Writes a message to f (stderr) with a nicely formatted stacktrace.
Skips the 'skip' last entries. By default it will flush stdout first.
It can be used everywhere and intentionally does not require an ui object.
diff --git a/mercurial/wireproto.py b/mercurial/wireproto.py
--- a/mercurial/wireproto.py
+++ b/mercurial/wireproto.py
@@ -10,7 +10,6 @@ from __future__ import absolute_import
import hashlib
import itertools
import os
-import sys
import tempfile
from .i18n import _
@@ -581,8 +580,8 @@ def options(cmd, keys, others):
opts[k] = others[k]
del others[k]
if others:
- sys.stderr.write("warning: %s ignored unexpected arguments %s\n"
- % (cmd, ",".join(others)))
+ util.stderr.write("warning: %s ignored unexpected arguments %s\n"
+ % (cmd, ",".join(others)))
return opts
def bundle1allowed(repo, action):
@@ -913,11 +912,11 @@ def unbundle(repo, proto, heads):
try:
raise
except error.Abort:
- # The old code we moved used sys.stderr directly.
+ # The old code we moved used util.stderr directly.
# We did not change it to minimise code change.
# This need to be moved to something proper.
# Feel free to do it.
- sys.stderr.write("abort: %s\n" % exc)
+ util.stderr.write("abort: %s\n" % exc)
return pushres(0)
except error.PushRaced:
return pusherr(str(exc))
More information about the Mercurial-devel
mailing list