Boris Feld <boris.feld@octobus.net> [Sat, 28 Apr 2018 12:51:44 +0200] rev 38616
run-tests: add support for external test result
The goal is to begin experiment with custom test result. I'm not sure we
should offers any backward-compatibility guarantee on that plugin API as it
doesn't change often and shouldn't have too much clients.
Differential Revision: https://phab.mercurial-scm.org/D3700
Yuya Nishihara <yuya@tcha.org> [Sun, 01 Jul 2018 23:36:53 +0900] rev 38615
encoding: alias cp65001 to utf-8 on Windows
As far as I can tell, cp65001 is the Windows name for UTF-8. I don't know
how different it is from the UTF-8, but Python 3 appears to have introduced
new codec for cp65001, so the alias is enabled only for Python 2.
https://bugs.python.org/
issue13216
This patch is untested, but hopefully fixes the following issue.
https://bitbucket.org/tortoisehg/thg/issues/5127/
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 15 Mar 2018 17:37:03 +0530] rev 38614
remotenames: synchronise remotenames after push also
Earlier we use to pull remotenames information from the server in case of pull
and clone only. This patch adds logic to push also command to pull remotenames
information.
This will help us in keeping the remotenames more upto date where there are a
lot people changing state of branches and bookmarks at the server.
Differential Revision: https://phab.mercurial-scm.org/D2874
Yuya Nishihara <yuya@tcha.org> [Sun, 10 Jun 2018 20:45:13 +0900] rev 38613
fileset: pass in badfn to inner matchers
Just for sanity. No idea if this will make a difference, but it should
propagate the badfn because the matcher created by mctx.matcher() will be
returned by fileset.match() in future patches.
Yuya Nishihara <yuya@tcha.org> [Sat, 09 Jun 2018 20:53:12 +0900] rev 38612
fileset: restrict getfileset() to not return a computed set (API)
And rename the functions accordingly. fileset.match() will be changed to
not compute the initial subset.
test-glog*.t get back to the state before
9f9ffe5f687c "match: compose
'set:' pattern as matcher."
Yuya Nishihara <yuya@tcha.org> [Sat, 09 Jun 2018 22:04:07 +0900] rev 38611
match: add prefixdirmatcher to adapt subrepo matcher back
This serves as an inverse function to the subdirmatcher, and will be used
to wrap a fileset matcher of subrepositories. One of the root/prefix paths
could be deduced from the matcher attributes to be wrapped, but we don't
since the callers of this class know the root/prefix paths and can simply
pass them in.
Yuya Nishihara <yuya@tcha.org> [Sat, 09 Jun 2018 18:58:16 +0900] rev 38610
fileset: make debugfileset filter repository files
This prepares for the structural change of the fileset. A computed fileset
will no longer be a set of files, but a boolean function (i.e. matcher) to
test if an input file matches the given fileset expression.
--all-files option is added because some examples in the test need to scan
files across revisions.
Yuya Nishihara <yuya@tcha.org> [Sun, 08 Jul 2018 19:24:18 +0900] rev 38609
bundle2: use ProgrammingError to report bad use of addparam()
This allows us to embed error message in bytes.
Yuya Nishihara <yuya@tcha.org> [Sun, 08 Jul 2018 19:34:11 +0900] rev 38608
py3: byte-stringify literals in extension in test-bundle2-format.t
# skip-blame just some b''
Yuya Nishihara <yuya@tcha.org> [Sun, 08 Jul 2018 19:32:39 +0900] rev 38607
py3: drop b'' while formatting BundleUnknownFeatureError message
Yuya Nishihara <yuya@tcha.org> [Sun, 08 Jul 2018 19:11:54 +0900] rev 38606
py3: suppress write() result and close file in test-bookmarks-pushpull.t
Yuya Nishihara <yuya@tcha.org> [Sun, 08 Jul 2018 18:58:11 +0900] rev 38605
py3: drop b'' while formatting ResponseError
Yuya Nishihara <yuya@tcha.org> [Sun, 08 Jul 2018 18:52:28 +0900] rev 38604
py3: fix revnums in bookmark discovery to be consumable more than once
Yuya Nishihara <yuya@tcha.org> [Sun, 08 Jul 2018 19:05:00 +0900] rev 38603
py3: byte-stringify literals in extension in test-bundle2-exchange.t
# skip-blame just some b''
Paul Morelle <paul.morelle@octobus.net> [Fri, 22 Jun 2018 01:42:38 +0200] rev 38602
aggressivemergedeltas: enabled the option by default
The option has been around for a while (August 2015) but was never turned on by
default. In-depth testing shows large wins for having that on with no
significant drawbacks.
When enabled, revlog consider delta against both p1 and p2 at the same time when
storing a revision. Selecting a delta against "p2" can produce better deltas and
chain. This raise large benefit for all repositories, especially if they have a
lot of merges.
Comparison of `.hg/store/` size:
mercurial (6.74% merges):
before: 54,225,348 bytes
after: 47,279,959 bytes -13%
pypy (8.30% merges):
before: 459,041,759 bytes
after: 346,090,067 bytes -25%
netbeans (34.21% merges):
before: 2,468,041,333 bytes
after: 1,364,077,645 bytes -45%
mozilla-central (4.84% merges):
before: 2,731,799,546 bytes
after: 2,157,718,019 bytes -21%
Comparison of `00manifest.d` size:
mercurial (6.74% merges):
before: 11,682,516 bytes
after: 6,143,044 bytes -47%
pypy (8.30% merges):
before: 156,447,163 bytes
after: 52,941,780 bytes -66%
netbeans (34.21% merges):
before: 1,250,363,851 bytes
after: 130,088,982 bytes -90%
mozilla-central (4.84% merges):
before: 468,202,733 bytes
after: 215,096,339 bytes -54%
In addition, the better deltas help with the performance of multiple core
operations. However, better chains mean longer chains, which can affect
performance negatively (mostly manifest revision retrieval time). Chains length
is a deeper problem that also affects linear repository too. Overall we think
the benefits of using p2 as a diff target are bigger than the downsizes. In
addition, we are also working on ways to improve the performance impact of chain
length, so theses downsizes get fixed in the future.
Below are interesting items from the full benchmark run:
bundling 100 revisions from pypy:
before: 670ms
after: 480ms -28%
bundle 10000 revisions from pypy:
before: 1.38s
after: 1.10s -54%
bundle 10000 revisions from pypy:
before: 16.1s
after: 7.81s -52%
bundle 10000 revisions from netbeans:
before: 19.3s
after: 15.5s -19%
unbundle 1000 revisions to pypy:
before: 641ms
after: 315ms - 51%
clone mercurial (http):
before: 26.0s
after: 22.6s -23%
pulling 1000 revisions from pypy (shh):
before: 2.07s
after: 1.36s -44%
pushing 1000 revision through http (pypy repository)
before: 2.18s
after: 1.35s -48%
diff time in mozilla-central:
before: 1.420s
after: 0.983s -31%
status time in mozilla-central:
before: 1.260s
after: 0.828s -34%
Impact in other cases seems minimal (within a couple of percent in worse cases)
and can be seen in both direction:
Timing for a simple `hg commit`:
mozilla-central:
before: 3.37s
after: 3.22s -4%
pypy:
before: 194ms
after: 197ms +2%
Timing for status (from tip to parent of tip):
mercurial:
before: 52.4ms
after: 52.4ms (same)
pypy:
before: 55.2
after: 56.9 +3%
Timing for `hg update`
mozilla-central, across 10 revisions:
before: 4.82s
after: 4.59s -5%
mozilla-central, across 10000 revisions:
before: 49.1s
after: 49.9s +2%
pypy, across 10 revisions:
before: 213ms
after: 216ms +1%
pypy, across 10000 revisions:
before: 5.31ms
after: 5.24ms -1%
The negative consequences are related to manifest fetch time:
(timing for the tip revision tested by the benchmark)
pypy-2018:
before: 2.60ms
after: 3.88ms +50%
mozilla-central-2018:
before: 565ms
after: 652ms +15% (~+100ms)
netbeans-2018:
before: 101ms
after: 250ms +48% (~+150ms)
This shows up as a fixed overhead on some command we benchmarked:
no-op push of mozilla-central:
before: 945ms
after: 1040ms +10% (~+100ms)
pushing 10 changeset in netbeabs over ssh:
before: 557ms
after: 712ms +28% (+155ms)
pushing 100 changeset in netbeabs over ssh:
before: 592ms
after: 771ms +30% (+179ms)