| Index: gclient_utils.py
|
| ===================================================================
|
| --- gclient_utils.py (revision 56049)
|
| +++ gclient_utils.py (working copy)
|
| @@ -279,6 +279,11 @@
|
| shell=(sys.platform == 'win32'), stdout=subprocess.PIPE,
|
| stderr=subprocess.STDOUT)
|
|
|
| + # Do a flush of sys.stdout before we begin reading from the subprocess's
|
| + # stdout.
|
| + last_flushed_at = time.time()
|
| + sys.stdout.flush()
|
| +
|
| # Also, we need to forward stdout to prevent weird re-ordering of output.
|
| # This has to be done on a per byte basis to make sure it is not buffered:
|
| # normally buffering is done for each line, but if svn requests input, no
|
| @@ -295,9 +300,16 @@
|
| sys.stdout.write(in_byte)
|
| if in_byte != '\n':
|
| in_line += in_byte
|
| - if in_byte == '\n' and filter_fn:
|
| - filter_fn(in_line)
|
| + if in_byte == '\n':
|
| + if filter_fn:
|
| + filter_fn(in_line)
|
| in_line = ''
|
| + # Flush at least 10 seconds between line writes. We wait at least 10
|
| + # seconds to avoid overloading the reader that called us with output,
|
| + # which can slow busy readers down.
|
| + if (time.time() - last_flushed_at) > 10:
|
| + last_flushed_at = time.time()
|
| + sys.stdout.flush()
|
| in_byte = kid.stdout.read(1)
|
| rv = kid.wait()
|
|
|
|
|