Mercurial > hg
view mercurial/helptext/pager.txt @ 45095:8e04607023e5
procutil: ensure that procutil.std{out,err}.write() writes all bytes
Python 3 offers different kind of streams and it’s not guaranteed for all of
them that calling write() writes all bytes.
When Python is started in unbuffered mode, sys.std{out,err}.buffer are
instances of io.FileIO, whose write() can write less bytes for
platform-specific reasons (e.g. Linux has a 0x7ffff000 bytes maximum and could
write less if interrupted by a signal; when writing to Windows consoles, it’s
limited to 32767 bytes to avoid the "not enough space" error). This can lead to
silent loss of data, both when using sys.std{out,err}.buffer (which may in fact
not be a buffered stream) and when using the text streams sys.std{out,err}
(I’ve created a CPython bug report for that:
https://bugs.python.org/issue41221).
Python may fix the problem at some point. For now, we implement our own wrapper
for procutil.std{out,err} that calls the raw stream’s write() method until all
bytes have been written. We don’t use sys.std{out,err} for larger writes, so I
think it’s not worth the effort to patch them.
author | Manuel Jacob <me@manueljacob.de> |
---|---|
date | Fri, 10 Jul 2020 12:27:58 +0200 |
parents | 2e017696181f |
children |
line wrap: on
line source
Some Mercurial commands can produce a lot of output, and Mercurial will attempt to use a pager to make those commands more pleasant. To set the pager that should be used, set the application variable:: [pager] pager = less -FRX If no pager is set in the user or repository configuration, Mercurial uses the environment variable $PAGER. If $PAGER is not set, pager.pager from the default or system configuration is used. If none of these are set, a default pager will be used, typically `less` on Unix and `more` on Windows. .. container:: windows On Windows, `more` is not color aware, so using it effectively disables color. MSYS and Cygwin shells provide `less` as a pager, which can be configured to support ANSI color codes. See :hg:`help config.color.pagermode` to configure the color mode when invoking a pager. You can disable the pager for certain commands by adding them to the pager.ignore list:: [pager] ignore = version, help, update To ignore global commands like :hg:`version` or :hg:`help`, you have to specify them in your user configuration file. To control whether the pager is used at all for an individual command, you can use --pager=<value>: - use as needed: `auto`. - require the pager: `yes` or `on`. - suppress the pager: `no` or `off` (any unrecognized value will also work). To globally turn off all attempts to use a pager, set:: [ui] paginate = never which will prevent the pager from running.