Mercurial > hg
changeset 23030:a0e0aa12b672
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".
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sat, 30 Aug 2014 17:38:14 +0200 |
parents | 149fc8a44184 |
children | 3c0983cc279e |
files | mercurial/util.py |
diffstat | 1 files changed, 4 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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