Gregory Szorc <gregory.szorc@gmail.com> [Mon, 25 May 2015 17:14:11 -0700] rev 25402
exchange: support transferring .hgtags fnodes mapping
On Mozilla's mozilla-beta repository .hgtags fnodes resolution takes
~18s from a clean cache on my machine. This means that the first time
a user runs `hg tags`, `hg log`, or any other command that displays or
accesses tags data, a ~18s pause will occur. There is no output during
this pause. This results in a poor user experience and perception
that Mercurial is slow.
The .hgtags changeset to filenode mapping is deterministic. This
patch takes advantage of that property by implementing support
for transferring .hgtags filenodes mappings in a dedicated bundle2
part. When a client advertising support for the "hgtagsfnodes"
capability requests a bundle, a mapping of changesets to .hgtags
filenodes will be sent to the client.
Only mappings of head changesets included in the bundle will be sent. The
transfer of this mapping effectively eliminates one time tags cache related
pauses after initial clone.
The mappings are sent as binary data. So, 40 bytes per pair of
SHA-1s. On the aforementioned mozilla-beta repository,
659 * 40 = 26,360 raw bytes of mappings are sent over the wire
(in addition to the bundle part headers). Assuming 18s to populate
the cache, we only need to transfer this extra data faster than
1.5 KB/s for overall clone + tags cache population time to be shorter.
Put into perspective, the mozilla-beta repository is ~1 GB in size.
So, this additional data constitutes <0.01% of the cloned data.
The marginal overhead for a multi-second performance win on clones
in my opinion justifies an on-by-default behavior.
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 01 Jun 2015 20:23:22 -0700] rev 25401
bundle2: part handler for processing .hgtags fnodes mappings
.hgtags fnodes cache entries can be expensive to compute, especially
if there are hundreds of even thousands of them. This patch implements
support for receiving a bundle2 part that contains a mapping of
changeset to .hgtags fnodes.
An upcoming patch will teach the server to send this part, allowing
clients to bypass having to redundantly compute these values.
A number of tests changed due to the client advertising the "hgtagsfnodes"
capability.
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 02 Jun 2015 19:58:06 -0700] rev 25400
changegroup: rename _computeoutgoing to computeoutgoing
We're going to use this function from another module in an upcoming
patch. Drop the _ prefix to mark it as non-private.
Matt Mackall <mpm@selenic.com> [Tue, 02 Jun 2015 13:24:39 -0500] rev 25399
merge with stable
Matt Harbison <matt_harbison@yahoo.com> [Mon, 01 Jun 2015 22:46:05 -0400] rev 25398
test-treemanifest: add globs for Windows
Matt Harbison <matt_harbison@yahoo.com> [Mon, 01 Jun 2015 22:41:07 -0400] rev 25397
test-import: sync with
6084926366b9 for platforms without execbit
Matt Harbison <matt_harbison@yahoo.com> [Mon, 01 Jun 2015 14:42:55 -0400] rev 25396
hgwebdir: avoid redundant repo and directory entries when 'web.name' is set
Previously, when 'web.name' was set on a subrepo parent and 'web.collapse=True',
the parent repo would show in the list with the configured 'web.name', and a
directory with the parent repo's filesystem name (with a trailing slash) would
also appear. The subrepo(s) would unexpectedly be excluded from the list of
repositories. Clicking the directory entry would go right to the repo page.
Now both the parent and the subrepos show up, without the additional directory
entry.
The configured hgweb paths used '**' for finding the repos in this scenario.
A couple of notes about the tests:
- The area where the subrepo was added has a comment that it tests subrepos,
though none previously existed there. One now does.
- The 'web.descend' option is required for collapse to work. I'm not sure what
the previous expectations were for the test. Nothing changed with it set,
prior to adding the code in this patch. It is however required for this test.
- The only output changes are for the hyperlinks, obviously because of the
'web.name' parameter.
- Without this code change, there would be an additional diff:
--- /usr/local/mercurial/tests/test-hgwebdir.t
+++ /usr/local/mercurial/tests/test-hgwebdir.t.err
@@ -951,7 +951,7 @@
/rcoll/notrepo/e/
/rcoll/notrepo/e/e2/
/rcoll/notrepo/f/
- /rcoll/notrepo/f/f2/
+ /rcoll/notrepo/f/
Test repositories inside intermediate directories
I'm not sure why the fancy name doesn't come out, but it is enough to
demonstrate that the parent is not listed redundantly, and the subrepo isn't
skipped.
Matt Mackall <mpm@selenic.com> [Mon, 01 Jun 2015 15:16:28 -0500] rev 25395
Added signature for changeset
ed18f4acf435
Matt Mackall <mpm@selenic.com> [Mon, 01 Jun 2015 15:16:24 -0500] rev 25394
Added tag 3.4.1 for changeset
ed18f4acf435
Matt Mackall <mpm@selenic.com> [Mon, 01 Jun 2015 14:47:02 -0500] rev 25393
merge with stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 02 Jun 2015 02:28:33 +0900] rev 25392
templatekw: compare target context and its parent exactly (
issue4690)
Before this patch, template keywords `{file_mods}`, `{file_adds}` and
`{file_dels}` use values gotten by `repo.status(ctx.p1().node(),
ctx.node())`.
But this doesn't work as expected if `ctx` is `memctx` or
`workingcommitctx`. Typical case of templating with these contexts is
customization of the text shown in the commit message editor by
`[committemplate]` configuration.
In this case, `ctx.node()` returns None and it causes comparison
between `ctx.p1()` and `workingctx`. `workingctx` lists up all changed
files in the working directory even at selective committing.
BTW, `{files}` uses `ctx.files()` and it works as expected.
To compare target context and its parent exactly, this patch passes
`ctx.p1()` and `ctx` without `node()`-nize. This avoids unexpected
comparison with `workingctx`.
This patch uses a little redundant template configurations in
`test-commit.t`, but they are needed to avoid regression around
problems fixed by
a4958cdb2202 and
1e6fb8db666e: accessing on `ctx`
may break `ctx._status` field.
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 29 May 2015 15:18:49 -0700] rev 25391
test: use bundle2 in test-pull-http
This test has a minor output change when using bundle2. We make this
change early to reduce the noise in the final change.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 27 May 2015 12:55:32 -0700] rev 25390
test: use bundle2 in test-push-http
Now that we have a bundle1 version of this test, we can move the original
to bundle2. This lets us handle the ouput change from using the bundle2
protocol earlier.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 27 May 2015 12:54:51 -0700] rev 25389
test: copy test-push-http.t to testpush-http-bundle1.t
We want to keep both code paths tested. The test is a bit too extensive to
simply introduce dual testing in it, so we make a copy for each protocol
version.
Matt Mackall <mpm@selenic.com> [Sun, 31 May 2015 16:59:34 -0500] rev 25388
tests: add (?) flag for optional lines
When the test engine fails to match output on a line marked with (?),
it will simply continue to the next expected line and try again. This
allows simplifying tests that have either version-specific or
non-fixed behavior, for instance:
$ coin-flip
heads (?)
tails (?)
(There's no form of back-tracking attempted, so optional matches
should be specific.)
Ryan McElroy <rmcelroy@fb.com> [Wed, 15 Apr 2015 09:07:54 -0700] rev 25387
templatekw: display active bookmark more consistently (
issue4552) (BC)
Previously, the template keyword '{activebookmark}' would only display the
active bookmark if it was also pointing to the working directory's parent.
Meanwhile, the '{active}' subkeyword of the '{bookmarks}' keyword displays
the active bookmark regardless of whether it also points to the working
directory's parent. This is confusing.
Consider the output of these two templates:
$ hg log -T '{activebookmark}\n' -r indent
$ hg log -T '{bookmarks % "{bookmark}"}\n' -r indent
indent
This is the current behavior that can arise after, eg, a pull moves a bookmark
out from under you. After this patch, the first template will also return the
active bookmark that points to a revision, even if it is not the current
parent of the working directory. A test has been added to show the new behavior.