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".
--- 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