Mercurial > hg
view contrib/plan9/README @ 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 | 4b0fc75f9403 |
children |
line wrap: on
line source
Mercurial for Plan 9 from Bell Labs =================================== This directory contains support for Mercurial on Plan 9 from Bell Labs platforms. It is assumed that the version of Python running on these systems supports the ANSI/POSIX Environment (APE). At the time of this writing, the bichued/python port is the most commonly installed version of Python on these platforms. If a native port of Python is ever made, some minor modification will need to be made to support some of the more esoteric requirements of the platform rather than those currently made (cf. posix.py). By default, installations will have the factotum extension enabled; this extension permits factotum(4) to act as an authentication agent for HTTP repositories. Additionally, an extdiff command named 9diff is enabled which generates diff(1) compatible output suitable for use with the plumber(4). Commit messages are plumbed using E if no editor is defined; users must update the plumbed file to continue, otherwise the hg process must be interrupted. Some work remains with regard to documentation. Section 5 manual page references for hgignore and hgrc need to be re-numbered to section 6 (file formats) and a new man page writer should be written to support the Plan 9 man macro set. Until these issues can be resolved, manual pages are elided from the installation. Basic install: % mk install # do a system-wide install % hg debuginstall # sanity-check setup % hg # see help A proto(2) file is included in this directory as an example of how a binary distribution could be packaged, ostensibly with contrib(1). See https://mercurial-scm.org/ for detailed installation instructions, platform-specific notes, and Mercurial user information.