Gregory Szorc <gregory.szorc@gmail.com> [Mon, 07 Oct 2019 10:34:21 -0400] rev 43110
tests: use range() in generate-churning-module.py
This is a test-only script. Performance on Python 2 for creating a
full list instead of a generator doesn't matter.
With this change, test-check-pyflakes.t passes on Python 3!
Differential Revision: https://phab.mercurial-scm.org/D7019
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 07 Oct 2019 10:31:11 -0400] rev 43109
tests: allow warning about file
The code is protected by a block that makes it Python 2 only, so
use of file is acceptable.
Differential Revision: https://phab.mercurial-scm.org/D7018
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 07 Oct 2019 10:28:32 -0400] rev 43108
lsprof: remove __main__ functionality
I'm pretty sure nobody uses this. I noticed it because Python 3
linting is complaining about execfile.
Differential Revision: https://phab.mercurial-scm.org/D7017
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 07 Oct 2019 10:26:46 -0400] rev 43107
tests: use proper Python 3.8 feature
Fix typo introduced in
830eacef67f8.
Differential Revision: https://phab.mercurial-scm.org/D7016
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 07 Oct 2019 00:04:04 -0400] rev 43106
py3: finish porting iteritems() to pycompat and remove source transformer
This commit finishes porting .iteritems() to pycompat.iteritems()
for the mercurial package.
The translation of .iteritems() to .items() was the last conversion
performed by the source transformer. With the porting to pycompat
complete, we no longer have a need for the source transformer. So
the source transformer has been removed. Good riddance! The code
base is now compatible with Python 2 and Python 3.
For the record, as the person who introduced the source transformer,
it brings me joy to delete it. It accomplished its goal to facilitate
a port to Python 3 without overly burdening people on some painful
low-level differences between Python 2 and 3. It is unfortunate we
still have to wallpaper over many differences with the pycompat
shim. But it is what it is.
Differential Revision: https://phab.mercurial-scm.org/D7015
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 06 Oct 2019 19:25:18 -0400] rev 43105
py3: define and use pycompat.iteritems() for hgext/
.iteritems() -> .items() is the last source transform being performed.
But it is also the most widely used.
This commit adds a pycompat.iteritems symbol and imports it in place
of .iteritems() for usage in hgext/. I chose to stop at just hgext/
because the patch will be large and it is an easy boundary to stop at
since we can disable source transformation on a per-package basis.
There are places where the type does implement items() and we could
call items() directly. However, this would require critical thought
and I thought it would be easier to just blindly change the code. We
know which call sites need to be audited in the future because they
have "pycompat.iteritems."
With this change, we no longer perform source transformation on
hgext!
Differential Revision: https://phab.mercurial-scm.org/D7014
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 06 Oct 2019 17:59:15 -0400] rev 43104
py3: define and use pycompat.itervalues()
.itervalues() only exists on Python 2. Python 3's equivalent is
.values(). But we don't want to blindly use .values() everywhere
because on Python 2, it will create a list, which will have performance
implications.
This commit introduces pycompat.itervalues() which will call the appropriate
method on the passed object. We update all callers of obj.itervalues()
to pycompat.itervalues(obj) instead.
With this commit, the only source tranforming remaining is for
iteritems(). Victory is near...
Differential Revision: https://phab.mercurial-scm.org/D7013
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 06 Oct 2019 17:45:05 -0400] rev 43103
py3: stop normalizing 2nd argument of *attr() to unicode
Now that we don't byteify strings, we can stop normalizing the 2nd
string argument to getattr() and remove explicit overrides we were
using in the code base.
We no longer use some helper functions in the source transformer,
so we remove those as well.
Differential Revision: https://phab.mercurial-scm.org/D7012
Yuya Nishihara <yuya@tcha.org> [Sun, 06 Oct 2019 14:58:41 -0400] rev 43102
log: populate keywords if specified in custom -Tjson(...) or -Tcbor(...)
To make things simple, early return for ui.quiet is disabled if the formatter
is templated and provides some datahint().
Yuya Nishihara <yuya@tcha.org> [Sat, 05 Oct 2019 23:30:09 -0400] rev 43101
formatter: map -Tjson(...) and -Tcbor(...) to templater
Even though custom JSON output could be generated by using
--config template.json="{dict(...)|json}" ..., doing that is tedious because
of the trailing comma handling.
This patch introduces special syntax for JSON/CBOR formats. -Tjson(...) is
translated to template as if function-style template definition were
supported:
[templates]
json(...) = "{dict(...)|json}"
json(...):docheader = "[\n "
json(...):docfooter = "\n]\n"
json(...):separator = ",\n "
Yuya Nishihara <yuya@tcha.org> [Sat, 05 Oct 2019 23:20:35 -0400] rev 43100
formatter: parse name of built-in formatter templates in standard way
This slightly makes it easier to add "-Tjson(...)" handling, which should
be enabled only if the template specifier doesn't look like a literal
template. In other words, it should be handled after "if '{' in tmpl".
This makes "log -Tpickle" and "log -Tdebug" abort, which I think is better
than just printing "picklepicklepickle...".
Yuya Nishihara <yuya@tcha.org> [Sat, 05 Oct 2019 23:04:45 -0400] rev 43099
formatter: pass in template spec to templateformatter as argument
Prepare for the next patch, which will unify handling of the formatter
names and the template names.