Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 10:02:36 -0500] rev 36641
py3: fix some unicode madness in global exception catcher
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 10:08:13 -0500] rev 36640
py3: pass a system-string filename to sub-classes of IOError
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 09:19:34 -0500] rev 36639
py3: fix some membership tests on linkrev adjustment
Yuya Nishihara <yuya@tcha.org> [Fri, 02 Mar 2018 22:38:09 -0500] rev 36638
py3: make test-basic.t pass on Python 3
Yuya Nishihara <yuya@tcha.org> [Fri, 02 Mar 2018 22:35:20 -0500] rev 36637
py3: silence the final IOError by closing stdout/err slightly early
Fixes the following test failure:
$ hg status >/dev/full
abort: No space left on device
Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' ...
OSError: [Errno 28] No space left on device
[120]
Yuya Nishihara <yuya@tcha.org> [Fri, 02 Mar 2018 22:10:36 -0500] rev 36636
py3: conditionalize initialization of stdio flags
Since Python 3 doesn't depend on the stdio of libc, there should be no need
to set O_BINARY flag on Windows.
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 18:25:19 -0500] rev 36635
test-command-template: glob out detailed "invalid escape" message
Python 3 also reports the position where an invalid escape found.
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 08:14:54 -0500] rev 36634
templater: byte-stringify dict/list values before passing to default format
bytestr() is applied only when no custom format string like '%d' is specified.
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 08:07:22 -0500] rev 36633
templater: allow dynamically switching the default dict/list formatting
'%s' doesn't work nicely on Python 3 because many Python types don't implement
__bytes__().
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 03 Mar 2018 21:01:07 +0530] rev 36632
py3: use util.forcevytestr to convert error to bytes
Differential Revision: https://phab.mercurial-scm.org/D2585
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 03 Mar 2018 09:50:07 -0500] rev 36631
util: report integer result from write()
Python 2 sometimes returns None from write() calls. Python 3 doesn't.
This will make test output inconsistent between Python 2 and 3. So
let's paper over the differences by converting None to the length of
the result string.
Differential Revision: https://phab.mercurial-scm.org/D2584
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 03 Mar 2018 09:34:06 -0500] rev 36630
util: log readinto() I/O
Differential Revision: https://phab.mercurial-scm.org/D2583
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 02 Mar 2018 22:47:18 -0500] rev 36629
util: teach escapedata() about bytearray
re.map doesn't seem to know about bytearray (at least in Python 2).
Cast bytearray to a bytes to work around this inconvenience.
Differential Revision: https://phab.mercurial-scm.org/D2582
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 02 Mar 2018 22:59:12 -0500] rev 36628
sshpeer: don't read(0)
read(0) is essentially a no-op. Let's avoid the function call, overhead,
and extra test output by not performing it.
Differential Revision: https://phab.mercurial-scm.org/D2581
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 05:51:34 -0500] rev 36627
py3: unblock C extensions on Python 3
Please make sure to build C extensions before running tests with -l:
$ make local PYTHON=python3
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 07:59:20 -0500] rev 36626
py3: make test-ancestors.py pass on Python 3 with C extensions
# skip-blame just some b prefixes
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 07:24:25 -0500] rev 36625
py3: do not pass a memoryview to bdiff.bdiff()
This doesn't look nice, but I don't know how to make a zero-copy slice of
bytes which is compatible with the buffer protocol.
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 07:00:37 -0500] rev 36624
py3: do not pass a list of iterators to computephasesmapsets()
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 06:57:02 -0500] rev 36623
cext: fix computephasesmapsets() not to return without setting an exception
Spotted by map() of Python 3.
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 06:44:47 -0500] rev 36622
py3: do not pass a float to dict_new_presized()
I really don't like the division operator of Python 3 since I'm not doing
a math.
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 06:41:52 -0500] rev 36621
cext: mark tuple_format as a constant
Just for clarity.
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 06:18:47 -0500] rev 36620
py3: bulk-replace 'const char*' format specifier passed to PyArg_ParseTuple*()
Perhaps we need this because 's' accepts a unicode string.
https://docs.python.org/3/c-api/arg.html#strings-and-buffers
Substituted using the following pattern with some manual fixes:
'\b(PyArg_ParseTuple)\((\s*\w+,\s*)"([^"]+)"'
'\b(PyArg_ParseTupleAndKeywords)\((\s*\w+,\s*\w+,\s*)"([^"]+)"'
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 06:08:22 -0500] rev 36619
py3: bulk-replace bytes format specifier passed to Py_BuildValue()
On Python 3, "s" means a utf-8 string. We have to use "y" for bytes, sigh.
https://docs.python.org/3/c-api/arg.html#c.Py_BuildValue
Substituted using the following pattern with some manual fixes:
'\b(Py_BuildValue)\((\s*)"([^"]+)"'
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 05:58:41 -0500] rev 36618
py3: add PY23() macro to switch string literal depending on python version
I have no better idea to work around the bytes-unicode divergence of
Py_BuildValue(). Maybe we can write a code transformer for C extensions? :)
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 05:50:45 -0500] rev 36617
py3: don't try to mangle C extension blob by code transformer
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 18:47:27 -0500] rev 36616
tests: add missing b prefixes in test-atomictempfile.py
# skip-blame just some b prefixes
Differential Revision: https://phab.mercurial-scm.org/D2570
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 27 Feb 2018 16:31:44 -0800] rev 36615
wireproto: only expose "between" to version 1 of wire protocols
We recently marked other legacy commands as only available to version 1
of the wire protocols. We held off marking "between" because it is
used as part of the SSH handshake.
Since SSH servers assume they are version 1 by default and the
"between" request that is issued as part of the version 2 handshake
is swallowed and not operated on, everything should "just work" if
"between" is not available to version 2.
Differential Revision: https://phab.mercurial-scm.org/D2513
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 02 Mar 2018 18:55:18 -0500] rev 36614
tests: add more tests around hook output and getbundle
The previous tests around hook output only tested Python hooks. Let's
add some shell hooks in for additional test coverage.
Differential Revision: https://phab.mercurial-scm.org/D2550
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 27 Feb 2018 16:24:02 -0800] rev 36613
wireproto: add transport specific capabilities in the transport
We add a method to the protocol handler interface that allows
specific implementations to add their own capabilities.
The SSH implementation is a no-op.
The HTTP implementation adds the HTTP-specific capabilities.
The end result is transport specific capabilities now live in the
transport code instead of in some generic function in the wireproto
module.
Differential Revision: https://phab.mercurial-scm.org/D2512
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 27 Feb 2018 15:23:04 -0800] rev 36612
wireproto: don't expose changegroupsubset capability if not available
We just marked the changegroupsubset command as only available to
version 1 of the wire transports. There is a capability of the same
name of the command that indicates if the command is supported.
This commit teaches the capabilities code to conditionally emit that
capability depending on whether the command is available for the
current transport.
Most test output is reordering of capabilities. But the limited tests
for version 2 of the SSH protocol do show the capability disappearing.
Differential Revision: https://phab.mercurial-scm.org/D2486