##// END OF EJS Templates
pager: recreate stdout to make it line-buffered...
Yuya Nishihara -
r26454:62c5e937 default
parent child Browse files
Show More
@@ -70,8 +70,14 b' def _runpager(ui, p):'
70 70 close_fds=util.closefds, stdin=subprocess.PIPE,
71 71 stdout=sys.stdout, stderr=sys.stderr)
72 72
73 # back up original file objects and descriptors
74 olduifout = ui.fout
75 oldstdout = sys.stdout
73 76 stdoutfd = os.dup(sys.stdout.fileno())
74 77 stderrfd = os.dup(sys.stderr.fileno())
78
79 # create new line-buffered stdout so that output can show up immediately
80 ui.fout = sys.stdout = newstdout = os.fdopen(sys.stdout.fileno(), 'wb', 1)
75 81 os.dup2(pager.stdin.fileno(), sys.stdout.fileno())
76 82 if ui._isatty(sys.stderr):
77 83 os.dup2(pager.stdin.fileno(), sys.stderr.fileno())
@@ -81,6 +87,12 b' def _runpager(ui, p):'
81 87 if util.safehasattr(signal, "SIGINT"):
82 88 signal.signal(signal.SIGINT, signal.SIG_IGN)
83 89 pager.stdin.close()
90 ui.fout = olduifout
91 sys.stdout = oldstdout
92 # close new stdout while it's associated with pager; otherwise stdout
93 # fd would be closed when newstdout is deleted
94 newstdout.close()
95 # restore original fds: stdout is open again
84 96 os.dup2(stdoutfd, sys.stdout.fileno())
85 97 os.dup2(stderrfd, sys.stderr.fileno())
86 98 pager.wait()
General Comments 0
You need to be logged in to leave comments. Login now