406 # to see output immediately on pager, the mode stays unchanged |
406 # to see output immediately on pager, the mode stays unchanged |
407 # when client re-attached. ferr is unchanged because it should |
407 # when client re-attached. ferr is unchanged because it should |
408 # be unbuffered no matter if it is a tty or not. |
408 # be unbuffered no matter if it is a tty or not. |
409 if fn == b'ferr': |
409 if fn == b'ferr': |
410 newfp = fp |
410 newfp = fp |
411 elif pycompat.ispy3: |
411 else: |
412 # On Python 3, the standard library doesn't offer line-buffered |
412 # On Python 3, the standard library doesn't offer line-buffered |
413 # binary streams, so wrap/unwrap it. |
413 # binary streams, so wrap/unwrap it. |
414 if fp.isatty(): |
414 if fp.isatty(): |
415 newfp = procutil.make_line_buffered(fp) |
415 newfp = procutil.make_line_buffered(fp) |
416 else: |
416 else: |
417 newfp = procutil.unwrap_line_buffered(fp) |
417 newfp = procutil.unwrap_line_buffered(fp) |
418 else: |
|
419 # Python 2 uses the I/O streams provided by the C library, so |
|
420 # make it line-buffered explicitly. Otherwise the default would |
|
421 # be decided on first write(), where fout could be a pager. |
|
422 if fp.isatty(): |
|
423 bufsize = 1 # line buffered |
|
424 else: |
|
425 bufsize = -1 # system default |
|
426 newfp = os.fdopen(fp.fileno(), mode, bufsize) |
|
427 if newfp is not fp: |
418 if newfp is not fp: |
428 setattr(ui, fn, newfp) |
419 setattr(ui, fn, newfp) |
429 setattr(self, cn, newfp) |
420 setattr(self, cn, newfp) |
430 |
421 |
431 self._ioattached = True |
422 self._ioattached = True |