convert: turn the last str regex into bytes in cvs.py (
issue6789)
Since root is bytes, the regular expression should also be bytes.
worker: avoid reading 1 byte at a time from the OS pipe
Apparently `pickle.load` does a lot of small reads, many of them
literally 1-byte, so it benefits greatly from buffering.
This change enables the buffering, at the cost of more complicated
interaction with the `selector` API.
On one repository with ~400k files this reduces the time by about ~30s,
from ~60 to ~30s. The difference is so large because the actual updating
work is parallellized, while these small reads are bottlenecking the
central hg process.
diffutil: rewrite an ersatz ternary operator for building diffopts.text
Pytype tends to get confused by these, but the real problem here is that if the
caller passes `opts={}` as TortoiseHg has been doing, that is set as the value
for `diffopts.text` when in reality it expects a boolean. When `None` is passed
explicitly, the default value in `mdiff.defaultopts` is assigned.