Matt Harbison <matt_harbison@yahoo.com> [Thu, 21 Nov 2019 17:25:24 -0500] rev 43440
util: convert an exception to bytes when passing to Abort()
I happened to notice this searching for how to convert an exception to bytes in
the previous patch. I'm pretty sure I've got a bunch of other instances that
use `pycompat.bytestr()` suppressed locally.
Differential Revision: https://phab.mercurial-scm.org/D7467
Matt Harbison <matt_harbison@yahoo.com> [Thu, 21 Nov 2019 14:28:28 -0500] rev 43439
patch: fix a str + bytes issue in an exception handler
Flagged by pytype.
Differential Revision: https://phab.mercurial-scm.org/D7466
Martin von Zweigbergk <martinvonz@google.com> [Wed, 20 Nov 2019 08:11:21 -0800] rev 43438
py3: wrap a __func__ in sysbytes() before logging as bytes
Differential Revision: https://phab.mercurial-scm.org/D7461
Daniel Ploch <dploch@google.com> [Wed, 20 Nov 2019 19:16:11 -0800] rev 43437
py3: make doc strings containing deprecated '\.' escape sequence raw strings
Differential Revision: https://phab.mercurial-scm.org/D7462
Matt Harbison <matt_harbison@yahoo.com> [Tue, 19 Nov 2019 14:59:23 -0500] rev 43436
shelve: add the missing `create` parameter to the bundlerepo constructor
Caught by pytype.
Differential Revision: https://phab.mercurial-scm.org/D7458
Matt Harbison <matt_harbison@yahoo.com> [Tue, 19 Nov 2019 14:36:22 -0500] rev 43435
shelve: fix a missing variable in the exception handler for delete
Caught by pytype. I haven't paid much attention to the progress of this
extension, but I *think* this was the intent.
Differential Revision: https://phab.mercurial-scm.org/D7457
Manuel Jacob <me@manueljacob.de> [Tue, 19 Nov 2019 11:59:43 +0100] rev 43434
py3: use pycompat.bytestr() instead of pycompat.sysstr()
pycompat.sysstr() doesn’t work because it doesn’t accept arguments of type
`type` and returns a unicode object on Python3, while the format string wants
a bytes-like object.
Kim Alvefur <zash@zash.se> [Wed, 13 Nov 2019 22:40:32 +0100] rev 43433
zeroconf: fix traceback under py3
hg serve under py3 caused
struct.error: char format requires a bytes object of length 1
<pulkit25> ah, I think that should be `pycompat.bytechr` instead of chr
Manuel Jacob <me@manueljacob.de> [Sun, 17 Nov 2019 19:55:01 +0100] rev 43432
cffi: fix build on Python 3
CFFI expects the arguments to be of type str, which means that the string
literals should not have the `b` prefix.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 16 Nov 2019 20:08:35 +0100] rev 43431
pure: use string for another exception in the pure version of base85
That message does not seems tested, but I am assuming that the same reasoning as
for the previous changeset applies.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 16 Nov 2019 20:07:49 +0100] rev 43430
pure: use string for exception in the pure version of base85
Without this change, running the test with python3 and --pure gives the
following error::
--- /home/marmoute/src/mercurial-dev/tests/test-import-git.t
+++ /home/marmoute/src/mercurial-dev/tests/test-import-git.t.err
@@ -518,7 +518,7 @@
>
> EOF
applying patch from stdin
- abort: could not decode "binary2" binary patch: bad base85 character at position 6
+ abort: could not decode "binary2" binary patch: b'bad base85 character at position 6'
[255]
$ hg revert -aq
To make the cext implementation, we use a "native" string for the exception.
This fix the test failure.
Denis Laxalde <denis.laxalde@logilab.fr> [Tue, 12 Nov 2019 11:05:03 +0100] rev 43429
py3: avoid iterating over a literal bytes in highlight
In Python 3, iterating over a bytes literal yields integers. Since we
use the value in `text.replace()`, this fails on Python 3 with the
following trackback:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/mercurial/hgweb/hgwebdir_mod.py", line 378, in run_wsgi
for r in self._runwsgi(req, res):
File "/usr/lib/python3/dist-packages/mercurial/hgweb/hgweb_mod.py", line 326, in run_wsgi
for r in self._runwsgi(req, res, repo):
File "/usr/lib/python3/dist-packages/mercurial/hgweb/hgweb_mod.py", line 449, in _runwsgi
return getattr(webcommands, cmd)(rctx)
File "/usr/lib/python3/dist-packages/mercurial/hgweb/webcommands.py", line 211, in file
return _filerevision(web, webutil.filectx(web.repo, web.req))
File "/usr/lib/python3/dist-packages/hgext/highlight/__init__.py", line 72, in filerevision_highlight
pygmentize(web, b'fileline', fctx, web.tmpl)
File "/usr/lib/python3/dist-packages/hgext/highlight/__init__.py", line 58, in pygmentize
field, fctx, style, tmpl, guessfilenameonly=filenameonly
File "/usr/lib/python3/dist-packages/hgext/highlight/highlight.py", line 62, in pygmentize
text = text.replace(c, b'')
TypeError: a bytes-like object is required, not 'int'
Martin von Zweigbergk <martinvonz@google.com> [Tue, 05 Nov 2019 13:31:40 -0800] rev 43428
relnotes: copy "next" to "5.2" and clear "next"
This is the same thing as we did for 5.1 in cba59b338976 (relnotes:
copy "next" to "5.1" and clear "next", 2019-08-01).
Differential Revision: https://phab.mercurial-scm.org/D7231
Martin von Zweigbergk <martinvonz@google.com> [Fri, 08 Nov 2019 10:13:05 -0800] rev 43427
py3: avoid `b'%s' % type(...)` in a ProgrammingError
Differential Revision: https://phab.mercurial-scm.org/D7363
Denis Laxalde <denis@laxalde.org> [Sat, 09 Nov 2019 10:31:58 +0100] rev 43426
py3: fix sorting of obsolete markers in obsutil (issue6217)
This is similar to 01e8eefd9434 and others. We move the sortedmarkers()
function from exchange module to obsutil.
Denis Laxalde <denis.laxalde@logilab.fr> [Wed, 06 Nov 2019 16:54:34 +0100] rev 43425
py3: fix handling of ctrl keys in crecord (issue6213)
The "keypressed" value in handlekeypressed() is a key name obtained by
curses's getkey(); this can be a multibyte string for special keys
like CTRL keys. Calling curses.unctrl() with such a value fails on
Python 3 with a TypeError as described in issue6213. (On Python 2, this
does not crash, but I'm not sure the result is correct, though it does
no matter here.)
So instead of calling unctrl(), we compare "keypressed" with the
expected "^L" obtained by curses.ascii.ctrl("L").
Denis Laxalde <denis.laxalde@logilab.fr> [Wed, 06 Nov 2019 16:53:01 +0100] rev 43424
py3: keep "keypressed" a native str in crecord
This will help in the next changeset by avoiding a decode step. Also,
the actual bytes conversion seems superfluous since values coming from
curses's getkey() will be a native string. As a consequence, we open the
"testcommands" file (used in test-interactive-curses.t) in text mode.
Denis Laxalde <denis.laxalde@logilab.fr> [Wed, 06 Nov 2019 17:12:13 +0100] rev 43423
py3: compare response of crecord's confirmationwindow with str
confirmationwindow() returns a native string, as a result of calling
chr() on getch(). On Python 3, response.lower().startswith(b"y") leads
to a TypeError.
This fixes a crash when typing "r" in the curses interface of
interactive commit.
Denis Laxalde <denis.laxalde@logilab.fr> [Thu, 07 Nov 2019 08:58:26 +0100] rev 43422
py3: compare http server's command with a native string
The "command" attribute is an str, so comparing with a bytes would not
work on Python 3. This might solve issues in test-lfs-serve-access.t
that happens sometimes (especially in CI):
--- /hgwork/src/tests/test-lfs-serve-access.t
+++ /hgwork/src/tests/test-lfs-serve-access.t.err
@@ -163,11 +163,13 @@
$ cat $TESTTMP/access.log $TESTTMP/errors.log
$LOCALIP - - [$LOGDATE$] "POST /missing/objects/batch HTTP/1.1" 404 - (glob)
+ $LOCALIP - - [05/Nov/2019 16:32:34] "{"objects": [{"oid": "f03217a32529a28a42d03b1244fe09b6e0f9fd06d7b966d4d50567be2abe6c0e", "size": 20}], "operation": "download"}" HTTPStatus.BAD_REQUEST -
$LOCALIP - - [$LOGDATE$] "GET /subdir/mount/point?cmd=capabilities HTTP/1.1" 200 - (glob)
$LOCALIP - - [$LOGDATE$] "GET /subdir/mount/point?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
$LOCALIP - - [$LOGDATE$] "GET /subdir/mount/point?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%252C03%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Aphases%253Dheads%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps%250Arev-branch-cache%250Astream%253Dv2&cg=1&common=0000000000000000000000000000000000000000&heads=525251863cad618e55d483555f3d00a2ca99597e&listkeys=bookmarks&phases=1 x-hgproto-1:0.1 0.2 comp=$USUAL_COMPRESSIONS$ partial-pull (glob)
$LOCALIP - - [$LOGDATE$] "POST /subdir/mount/point/.git/info/lfs/objects/batch HTTP/1.1" 200 - (glob)
$LOCALIP - - [$LOGDATE$] "GET /subdir/mount/point/.hg/lfs/objects/f03217a32529a28a42d03b1244fe09b6e0f9fd06d7b966d4d50567be2abe6c0e HTTP/1.1" 200 - (glob)
+ $LOCALIP - - [05/Nov/2019 16:32:34] code 400, message Bad request version ('"download"}')
Blobs that already exist in the usercache are linked into the repo store, even
though the client doesn't send the blob.
@@ -195,6 +197,7 @@
server2/.hg/store/lfs/objects/f0/3217a32529a28a42d03b1244fe09b6e0f9fd06d7b966d4d50567be2abe6c0e
$ "$PYTHON" $RUNTESTDIR/killdaemons.py $DAEMON_PIDS
$ cat $TESTTMP/errors.log
+ $LOCALIP - - [05/Nov/2019 16:32:34] code 400, message Bad request version ('"download"}')
$ cat >> $TESTTMP/lfsstoreerror.py <<EOF
> import errno
(from https://ci.hg.gregoryszorc.com/job-info/hg-committed-ca3dca416f8d5863ca6f5a4a6a6bb835dcd5feeb-debian10-cpython-3.7-0)
Martin von Zweigbergk <martinvonz@google.com> [Tue, 05 Nov 2019 08:42:42 -0800] rev 43421
py3: don't use bytes with vars() or __dict__
Inspired by D7227. These were all the remaining instances I could
find.
Differential Revision: https://phab.mercurial-scm.org/D7230
Augie Fackler <raf@durin42.com> [Tue, 05 Nov 2019 12:10:38 -0500] rev 43420
Added signature for changeset ca3dca416f8d
Augie Fackler <raf@durin42.com> [Tue, 05 Nov 2019 12:10:38 -0500] rev 43419
Added tag 5.2 for changeset ca3dca416f8d
Yuya Nishihara <yuya@tcha.org> [Tue, 05 Nov 2019 21:35:19 +0900] rev 43418
py3: add inline comment about encoding issue of str(Abort())
Yuya Nishihara <yuya@tcha.org> [Tue, 05 Nov 2019 21:29:40 +0900] rev 43417
py3: do not reimplement Abort.__str__() on Python 2
It isn't necessary on Python 2, and the default implementation should be
better than our BaseException_str() clone.
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 04 Nov 2019 20:57:31 -0800] rev 43416
tests: write out file using bytes I/O
The encoding of sys.stdout varies between Python versions. So
using a one-liner to write a file from a Unicode string is not
deterministic.
This commit writes out the file using bytes I/O to ensure we
have exactly the bytes we want in the file.
This change fixes a test failure in Python 3.5/3.6.
Differential Revision: https://phab.mercurial-scm.org/D7226
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 04 Nov 2019 20:46:19 -0800] rev 43415
import-checker: open all source files as utf-8
Before, we opened in text mode and used the default encoding
to interpret the bytes within.
This caused problems interpreting some byte sequences in some
files.
This commit changes things to always open files as UTF-8, which
makes the error go away.
test-check-module-imports.t now passes on Python 3.5 and 3.6
with this change.
Differential Revision: https://phab.mercurial-scm.org/D7225
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 04 Nov 2019 21:17:34 -0800] rev 43414
localrepo: use str for lookup in vars()
vars() returns a dict of str. So always use a native str for
the key lookup.
Differential Revision: https://phab.mercurial-scm.org/D7227
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 04 Nov 2019 23:44:10 -0800] rev 43413
automation: install python3-venv Debian package
Debian's python install has a crippled venv by default, as it is
lacking ensurepip. When you try to run `python3 -m venv` it tells
you to install `python3-venv`. So this commit does that in our
automation environment so we can fully test installing Mercurial
using venv+pip with the system Python.
Differential Revision: https://phab.mercurial-scm.org/D7229
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 04 Nov 2019 23:42:18 -0800] rev 43412
tests: look for ensurepip before using venv
Debian appears to cripple the venv module by default by
removing the associated ensurepip functionality. (The module
isn't present at all.) This caused test-install.t to fail when
using the Debian python3 unless the python3-venv package was
installed.
This commit introduces a new hghave requirement for detecting
ensurepip and makes the Python 3 install variant conditional on
its presence. This should make test-install.t pass when
using an incomplete Debian Python.
Differential Revision: https://phab.mercurial-scm.org/D7228
Matt Harbison <matt_harbison@yahoo.com> [Thu, 17 Oct 2019 16:46:13 -0400] rev 43411
automation: avoid '~' in the temp directory on Windows
If a long-ish username is used, the environment variable ends up with a '~' to
be 8.3 path compatible. That in turn causes a handful of tests (mostly ssh
related) to add quotes around $TESTMP.
I have no AWS experience, so I have no idea if this is the proper way to do it.
But I've hit this problem locally, and redirecting the directory is a
workaround. I don't recall if the directory is created on demand by the test
harness, but presumably if this is configured before the machine boots, Windows
will do it for us.
Differential Revision: https://phab.mercurial-scm.org/D7130