linelog: fix infinite loop vulnerability
Checking `len(lines)` is not a great way of detecting infinite loops, as
demonstrated in the added test. Therefore check instruction count instead.
The original C implementation does not have this problem. There are a few
other places where the C implementation enforces more strictly, like
`a1 <= a2`, `b1 <= b2`, `rev > 0`. But they are optional.
Test Plan:
Add a test. The old code forces the test to time out.
Differential Revision: https://phab.mercurial-scm.org/D4151
tests: fix bytes/str issues in run-tests.py caught by python3
Differential Revision: https://phab.mercurial-scm.org/D4143
changegroup: assign to proper attribute
0548f696795b accidentally assigned to self.clrevtolocalrev instead of
self._clrevtolocalrev. Surprisingly, no tests failed as a result of
this mistake. Curious.
Differential Revision: https://phab.mercurial-scm.org/D4144
absorb: remove sf alias for command
I'm not even sure what it is supposed to stand for.
Differential Revision: https://phab.mercurial-scm.org/D4126
hgweb: catch ParseError that's raised by revset.match()
Some queries, like the demonstrated "first(::)", fail earlier than we call
mfunc(), and that results in a "500 Internal Server Error". To prevent it,
revset.match() also needs to be in a try-except block.
templatekw: deprecate old-style template keyword function (API)
.. api::
`f(**kwargs)` style template keyword function is deprecated. Switch to
new `(context, mapping)` API by declaring resource requirements.
The new-style API will be the default in Mercurial 4.9. See
registrar.templatekeyword for details.