Yuya Nishihara <yuya@tcha.org> [Wed, 05 Sep 2018 20:52:22 +0900] rev 38785
dirstate: use tuple interface to fix leak in pack_dirstate()
Spotted by ASAN.
Unlike PyTuple_GET_ITEM(), PySequence_ITEM() returns a new reference. This
bug could be fixed by inserting Py_CLEAR() and Py_XDECREF() appropriately,
but I think requiring a tuple object is simpler and less error-prone.
The cext version is jumped to 10 since 6..9 are used in the default branch.
We'll need to bump it again at merge.
Yuya Nishihara <yuya@tcha.org> [Wed, 05 Sep 2018 22:10:41 +0900] rev 38784
xdiff: fix leak in hunk_consumer()
Spotted by ASAN.
Since PyList_Append() does not "steal" a reference, Py_DECREF() is always
required. Perhaps, this is the largest leak in this series.
Yuya Nishihara <yuya@tcha.org> [Wed, 05 Sep 2018 20:57:38 +0900] rev 38783
base85: fix leak on error return from b85decode()
Spotted by ASAN.
We don't need to initialize 'out' to NULL, but I decided to do that for
clarity.
Augie Fackler <raf@durin42.com> [Tue, 04 Sep 2018 11:59:12 -0400] rev 38782
Added signature for changeset ede3bf31fe63
Augie Fackler <raf@durin42.com> [Tue, 04 Sep 2018 11:59:09 -0400] rev 38781
Added tag 4.7.1 for changeset ede3bf31fe63
Yuya Nishihara <yuya@tcha.org> [Fri, 31 Aug 2018 21:44:24 +0900] rev 38780
hgweb: load revcount + 1 entries to fill nextentry in log page (issue5972)
"revcount + 1" is moved to the call site to make it clearer.
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 24 Aug 2018 18:21:55 -0700] rev 38779
scmutil: avoid quadratic membership testing (issue5969)
tr.changes['revs'] is an xrange, which has an O(n) __contains__
implementation. The `rev not in newrevs` lookup a few lines below
will therefore be O(n^2) if all incoming changesets are public.
This issue isn't present on @ because 45e05d39d9ce introduced
a custom type implementing an xrange primitive with O(1) contains
and switched tr.changes['revs'] to be an instance of that type.
We work around the problem on the stable branch by casting the
xrange to a set. This is a bit hacky because it requires allocating
memory to hold each integer in the range. But we are already
holding the full set of pulled revision numbers in memory
multiple times (such as in `tr.changes['phases']`). So this is
a relatively minor problem.
This issue has been present since the phases reporting code was
introduced in the 4.7 cycle by eb9835014d20.
This change should be reverted/ignored when stable is merged into
default.
On the mozilla-unified repository with 483492 changesets, `hg clone`
time improves substantially:
before: 1843.700s user; 29.810s sys
after: 461.170s user; 29.360s sys
Boris Feld <boris.feld@octobus.net> [Sat, 18 Aug 2018 10:24:57 +0200] rev 38778
phases: drop dead code in `newheads`
There are new code earlier in the function achieving the same result.
Spotted by Yuya Nishihara.
Boris Feld <boris.feld@octobus.net> [Sat, 18 Aug 2018 10:24:16 +0200] rev 38777
phases: fix `nullid` reference in newheads
Spotted by Yuya Nishihara.
Augie Fackler <augie@google.com> [Mon, 20 Aug 2018 16:33:48 -0400] rev 38776
beautifygraph: don't warn about busted terminal if HGPLAIN is set
This was breaking some automation for users that discovered the
extension and turned it on.
Differential Revision: https://phab.mercurial-scm.org/D4338
Yuya Nishihara <yuya@tcha.org> [Sun, 19 Aug 2018 13:27:02 +0900] rev 38775
merge: do not delete untracked files silently (issue5962)
37450a122128, 2a774cae3a03, and 656ac240f392 weren't enough to prevent data
loss. No unknown "files" weren't deleted before 7a8a16f8ea22, "context: also
consider path conflicts when clearing unknown files."
Yuya Nishihara <yuya@tcha.org> [Sat, 18 Aug 2018 10:33:03 +0900] rev 38774
perf: fix typo in perfphasesremote()
Boris Feld <boris.feld@octobus.net> [Fri, 17 Aug 2018 20:35:52 +0200] rev 38773
remotephase: avoid full changelog iteration (issue5964)
Changeset 88efb7d6bcb6 introduced a performance regression by triggering a
full ancestors walk.
This changeset reworks this logic so that we no longer walk down the full
changelog. The motivation for 88efb7d6bcb6, issue5939, is still fixed.
mercurial compared to a draft repository
----------------------------------------
8eeed92475d5: 0.012637 seconds
88efb7d6bcb6: 0.202699 seconds (x16)
46da52f4b820: 0.215551 seconds (+6%)
this code: 0.008397 seconds (-33% from base)
The payload size reduction we see in `test-bookmarks-pushpull.t` comes from a
more aggressive filter of nullid and is harmless.
Boris Feld <boris.feld@octobus.net> [Fri, 17 Aug 2018 16:00:32 -0700] rev 38772
remotephase: fast path newheads computation in simple case (issue5964)
Changeset 88efb7d6bcb6 fixed the logic of `phases.newheads` but greatly
regressed its performance (up to many order of magnitude). The first step to
fix the regression is to exit early when there is no work to do. If there are
no heads to filter or not roots to filter them, we don't have to do any work.
This fixes the regression when talking to an all public changeset. The
performance is even better than before.
pypy, compared to an all public repo
------------------------------------
8eeed92475d5: 0.005758 seconds
88efb7d6bcb6: 0.602517 seconds (x104)
this code: 0.001508 seconds (-74% from base)
mercurial compared to an all public repo
----------------------------------------
8eeed92475d5: 0.000577 seconds
88efb7d6bcb6: 0.185316 seconds (x321)
this code: 0.000150 seconds (-74% from base)
The performance of newheads, when actual computations are required, is fixed
in the next changeset.
Boris Feld <boris.feld@octobus.net> [Fri, 17 Aug 2018 17:51:06 +0200] rev 38771
perf: add a perfphasesremote command
This command measure the time we spend analysing remote phase during push and
pull and display some information relevant to this computation.
The `test-contrib-perf.t` expected output has to be updated but I do need
these module for this perf command.