Patchwork [V2,(1,of,3)] ui: introduce util.system() wrapper to make sure ui.fout is used

login
register
mail settings
Submitter Yuya Nishihara
Date Nov. 8, 2014, 2:56 p.m.
Message ID <296e919ad1184abe3c44.1415458579@mimosa>
Download mbox | patch
Permalink /patch/6654/
State Superseded
Commit d9d8d2e0f701f67ca4f6e880994c2c847eab8f07
Headers show

Comments

Yuya Nishihara - Nov. 8, 2014, 2:56 p.m.
# HG changeset patch
# User Yuya Nishihara <yuya@tcha.org>
# Date 1415419062 -32400
#      Sat Nov 08 12:57:42 2014 +0900
# Node ID 296e919ad1184abe3c44dae6bf0ca04edd10f025
# Parent  2d54aa5397cdb1c697673ba10b7618d5ac25c69e
ui: introduce util.system() wrapper to make sure ui.fout is used

This change is intended to avoid future problem of data corruption under
command server.  out=ui.fout is mandatory as long as command server uses
stdout as IPC channel.

Patch

diff --git a/mercurial/ui.py b/mercurial/ui.py
--- a/mercurial/ui.py
+++ b/mercurial/ui.py
@@ -814,10 +814,9 @@  class ui(object):
 
             editor = self.geteditor()
 
-            util.system("%s \"%s\"" % (editor, name),
+            self.system("%s \"%s\"" % (editor, name),
                         environ=environ,
-                        onerr=util.Abort, errprefix=_("edit failed"),
-                        out=self.fout)
+                        onerr=util.Abort, errprefix=_("edit failed"))
 
             f = open(name)
             t = f.read()
@@ -827,6 +826,13 @@  class ui(object):
 
         return t
 
+    def system(self, cmd, environ={}, cwd=None, onerr=None, errprefix=None):
+        '''execute shell command with appropriate output stream. command
+        output will be redirected if fout is not stdout.
+        '''
+        return util.system(cmd, environ=environ, cwd=cwd, onerr=onerr,
+                           errprefix=errprefix, out=self.fout)
+
     def traceback(self, exc=None, force=False):
         '''print exception traceback if traceback printing enabled or forced.
         only to call in exception handler. returns true if traceback