Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 01 Jun 2015 10:28:40 -0700] rev 25403
wireprotocol: distinguish list and set in getbundle argument
The 'bundlecaps' argument is expected to be a set, but 'listkeys' is
expected to be a list where ordering matters. We introduce a new 'scsv'
argument type for the 'set' version and move 'csv' to the 'list'
version.
'test-ssh.t' is changed because this introduced an instability in the order we
were producing listkeys parts.
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.
Yuya Nishihara <yuya@tcha.org> [Sun, 24 May 2015 18:30:27 +0900] rev 25386
revrange: build spanset from x:y range
This slightly improves the performance in the optimal case:
% hg log -R mozilla-central -r0:tip -l1 --time
(before)
time: real 0.050 secs (user 0.040+0.000 sys 0.010+0.000)
(after)
time: real 0.020 secs (user 0.000+0.000 sys 0.010+0.000)
Yuya Nishihara <yuya@tcha.org> [Sun, 24 May 2015 18:11:33 +0900] rev 25385
revrange: build balanced tree of addsets from revisions (
issue4565)
This reduces the stack depth from O(n) to O(log(n)). Therefore, repeated
-rREV options will never exceed the Python stack limit.
Currently it depends on private revset._combinesets() function. But at some
point, we'll be able to drop the old-style parser, and revrange() can be
completely rewritten without using _combinesets():
trees = [parse(s) for s in revs]
optimize(('or',) + trees) # combine trees and optimize at once
...
Blockers that prevent eliminating old-style parser:
- nullary ":" operator
- revrange(repo, [intrev, ...]), can be mapped to 'rev(%d)' ?
- revrange(repo, [binnode, ...]), should be banned ?
Yuya Nishihara <yuya@tcha.org> [Sun, 24 May 2015 17:59:55 +0900] rev 25384
revrange: clean up meaningless reconstruction of sets
They just exist for deduplication that was removed by the previous patch.
Yuya Nishihara <yuya@tcha.org> [Sun, 24 May 2015 17:53:22 +0900] rev 25383
revrange: drop unnecessary deduplication of revisions
Because "l" is a smartset, duplicated entries are omitted by addsets.
Gilles Moris <gilles.moris@free.fr> [Fri, 29 May 2015 22:23:58 +0200] rev 25382
summary: move the parents phase marker to commit line (
issue4688)
The phase of the pending commit depends on the parent of the working directory
and on the phases.newcommit configuration.
First, this information rather depend on the commit line which describe the
pending commit.
Then, we only want to be advertised when the pending phase is going to be higher
than the default new commit phase.
So the format will change from
$ hg summary
parent: 2:
ab91dfabc5ad
foo
parent: 3:
24f1031ad244 tip
bar
branch: default
commit: 1 modified, 1 unknown, 1 unresolved (merge)
update: (current)
phases: 1 secret (secret)
to
parent: 2:
ab91dfabc5ad
foo
parent: 3:
24f1031ad244 tip
bar
branch: default
commit: 1 modified, 1 unknown, 1 unresolved (merge) (secret)
update: (current)
phases: 1 secret
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 25 May 2015 16:48:55 -0700] rev 25381
tags: support setting hgtags fnodes cache entries
An upcoming patch will teach bundle2 to transfer .hgtags fnodes
values. To support this, we need to support inserting values into
the cache.
Add functionality to do that.
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 25 May 2015 16:24:23 -0700] rev 25380
tags: support reading tags cache without populating
An upcoming patch will teach the bundle2 protocol to transfer .hgtags
fnodes to the client. We don't want this to incur any extra work
at serve time. Create an optional cache query mode that doesn't
populate the cache as a side-effect.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 31 May 2015 17:41:35 -0700] rev 25379
check-commit: make foo_bar naming regexp less greedy
\s is equivalent to the character class [ \t\n\r\f\v]. Using \s+ in
a regular expression against input with multiple lines may match across
multiple lines.
For the regexp in question, "\+\s+" would match "+\n " and similar
sequences, leading to false positives for functions that were included
in diff context, after a modified hunk.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 27 May 2015 12:05:08 -0700] rev 25378
test: use bundle2 in test-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:03:31 -0700] rev 25377
test: copy test-http.t to test-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.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 27 May 2015 11:57:20 -0700] rev 25376
test: use bundle2 in test-ssh
Now that we have a bundle1 version of this test, we can move the main
version 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 11:55:39 -0700] rev 25375
test: copy test-ssh.t to test-ssh-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.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 27 May 2015 04:39:24 -0700] rev 25374
test: lock test-unbundlehash to bundle1 usage
It is testing a bundle1 specific behavior. Bundle2 has its own way there. See
inline comment for details.