util.system: avoid buffering of subprocess output when it is piped
authorYuya Nishihara <yuya@tcha.org>
Sat, 30 Aug 2014 17:38:14 +0200
changeset 23030 a0e0aa12b672
parent 23029 149fc8a44184
child 23031 3c0983cc279e
util.system: avoid buffering of subprocess output when it is piped util.system() copies subprocess' output through pipe if output file is not stdout. Because a file iterator has internal buffering, output won't be flushed until enough data is available. Therefore, it could easily miss important messages such as "waiting for lock".
mercurial/util.py
--- a/mercurial/util.py	Fri Oct 17 09:57:05 2014 +0900
+++ b/mercurial/util.py	Sat Aug 30 17:38:14 2014 +0200
@@ -649,7 +649,10 @@
             proc = subprocess.Popen(cmd, shell=True, close_fds=closefds,
                                     env=env, cwd=cwd, stdout=subprocess.PIPE,
                                     stderr=subprocess.STDOUT)
-            for line in proc.stdout:
+            while True:
+                line = proc.stdout.readline()
+                if not line:
+                    break
                 out.write(line)
             proc.wait()
             rc = proc.returncode