profiling: flush stdout before writing profile to stderr
On py3, stdout and stderr appear to be buffered and this causes my command's
output to be intermixed with the profiling output.
Differential Revision: https://phab.mercurial-scm.org/D8024
--- a/mercurial/profiling.py Tue Jan 28 10:40:19 2020 -0800
+++ b/mercurial/profiling.py Mon Jan 27 18:16:05 2020 -0800
@@ -186,6 +186,7 @@
self._output = None
self._fp = None
self._fpdoclose = True
+ self._flushfp = None
self._profiler = None
self._enabled = enabled
self._entered = False
@@ -246,6 +247,8 @@
else:
self._fpdoclose = False
self._fp = self._ui.ferr
+ # Ensure we've flushed fout before writing to ferr.
+ self._flushfp = self._ui.fout
if proffn is not None:
pass
@@ -265,6 +268,7 @@
def __exit__(self, exception_type, exception_value, traceback):
propagate = None
if self._profiler is not None:
+ self._uiflush()
propagate = self._profiler.__exit__(
exception_type, exception_value, traceback
)
@@ -280,3 +284,7 @@
def _closefp(self):
if self._fpdoclose and self._fp is not None:
self._fp.close()
+
+ def _uiflush(self):
+ if self._flushfp:
+ self._flushfp.flush()