Fri, 06 Feb 2015 17:41:24 +0000 bundle2: use bundle2 by default
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 06 Feb 2015 17:41:24 +0000] rev 25404
bundle2: use bundle2 by default All the test change have been isolated and validated. We have free to turn on bundle2 as the default exchange protocol. "To reach a port we must set sail – Sail, not tie at anchor Sail, not drift."
Mon, 01 Jun 2015 10:28:40 -0700 wireprotocol: distinguish list and set in getbundle argument
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.
Mon, 25 May 2015 17:14:11 -0700 exchange: support transferring .hgtags fnodes mapping
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.
Mon, 01 Jun 2015 20:23:22 -0700 bundle2: part handler for processing .hgtags fnodes mappings
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.
Tue, 02 Jun 2015 19:58:06 -0700 changegroup: rename _computeoutgoing to computeoutgoing
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.
Tue, 02 Jun 2015 13:24:39 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Tue, 02 Jun 2015 13:24:39 -0500] rev 25399
merge with stable
Mon, 01 Jun 2015 22:46:05 -0400 test-treemanifest: add globs for Windows
Matt Harbison <matt_harbison@yahoo.com> [Mon, 01 Jun 2015 22:46:05 -0400] rev 25398
test-treemanifest: add globs for Windows
Mon, 01 Jun 2015 22:41:07 -0400 test-import: sync with 6084926366b9 for platforms without execbit
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
Mon, 01 Jun 2015 14:42:55 -0400 hgwebdir: avoid redundant repo and directory entries when 'web.name' is set stable
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.
Mon, 01 Jun 2015 15:16:28 -0500 Added signature for changeset ed18f4acf435 stable
Matt Mackall <mpm@selenic.com> [Mon, 01 Jun 2015 15:16:28 -0500] rev 25395
Added signature for changeset ed18f4acf435
Mon, 01 Jun 2015 15:16:24 -0500 Added tag 3.4.1 for changeset ed18f4acf435 stable
Matt Mackall <mpm@selenic.com> [Mon, 01 Jun 2015 15:16:24 -0500] rev 25394
Added tag 3.4.1 for changeset ed18f4acf435
Mon, 01 Jun 2015 14:47:02 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Mon, 01 Jun 2015 14:47:02 -0500] rev 25393
merge with stable
Tue, 02 Jun 2015 02:28:33 +0900 templatekw: compare target context and its parent exactly (issue4690) stable 3.4.1
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.
Fri, 29 May 2015 15:18:49 -0700 test: use bundle2 in test-pull-http
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.
Wed, 27 May 2015 12:55:32 -0700 test: use bundle2 in test-push-http
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.
Wed, 27 May 2015 12:54:51 -0700 test: copy test-push-http.t to testpush-http-bundle1.t
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.
Sun, 31 May 2015 16:59:34 -0500 tests: add (?) flag for optional lines
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.)
Wed, 15 Apr 2015 09:07:54 -0700 templatekw: display active bookmark more consistently (issue4552) (BC)
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.
Sun, 24 May 2015 18:30:27 +0900 revrange: build spanset from x:y range
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)
Sun, 24 May 2015 18:11:33 +0900 revrange: build balanced tree of addsets from revisions (issue4565)
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 ?
Sun, 24 May 2015 17:59:55 +0900 revrange: clean up meaningless reconstruction of sets
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.
Sun, 24 May 2015 17:53:22 +0900 revrange: drop unnecessary deduplication of revisions
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.
Fri, 29 May 2015 22:23:58 +0200 summary: move the parents phase marker to commit line (issue4688)
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
Mon, 25 May 2015 16:48:55 -0700 tags: support setting hgtags fnodes cache entries
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.
Mon, 25 May 2015 16:24:23 -0700 tags: support reading tags cache without populating
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.
Sun, 31 May 2015 17:41:35 -0700 check-commit: make foo_bar naming regexp less greedy
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.
Wed, 27 May 2015 12:05:08 -0700 test: use bundle2 in test-http
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.
Wed, 27 May 2015 12:03:31 -0700 test: copy test-http.t to test-http-bundle1.t
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.
Wed, 27 May 2015 11:57:20 -0700 test: use bundle2 in test-ssh
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.
Wed, 27 May 2015 11:55:39 -0700 test: copy test-ssh.t to test-ssh-bundle1.t
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.
Wed, 27 May 2015 04:39:24 -0700 test: lock test-unbundlehash to bundle1 usage
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.
Wed, 27 May 2015 06:42:42 -0700 test: use bundle2 in test-acl
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 27 May 2015 06:42:42 -0700] rev 25373
test: use bundle2 in test-acl This test makes extensive use of --debug so moving to bundle2 based exchange has a massive impact. We do it early to reduce the noise create by a future usage of bundle2 as the default protocol.
Wed, 27 May 2015 11:37:11 -0700 test: use both bundle formats in test-pull-http
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 27 May 2015 11:37:11 -0700] rev 25372
test: use both bundle formats in test-pull-http It is valuable to have both formats tested.
Wed, 27 May 2015 06:52:23 -0700 test: use bundle2 in test-http-proxy
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 27 May 2015 06:52:23 -0700] rev 25371
test: use bundle2 in test-http-proxy The proxy test does not care about what protocol is used, but the new protocol implies different traffic (and therefore different log output). We switch it to bundle2 early to minimise the noise of using bundle2 for exchange by default.
Wed, 27 May 2015 04:56:44 -0700 tests: use bundle2 for test-hook
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 27 May 2015 04:56:44 -0700] rev 25370
tests: use bundle2 for test-hook Using bundle2 has an effect on which hooks are run when. We turn it on for test-hooks early to reduce the noise of switching the default exchange to bundle2.
Wed, 27 May 2015 04:57:03 -0700 pull: only prefetch bookmarks when using bundle1
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 27 May 2015 04:57:03 -0700] rev 25369
pull: only prefetch bookmarks when using bundle1 All bundle2 servers now support the 'listkeys' part(1), so we'll always be able to fetch bookmarks data at the same time as the changeset. This should be enough to avoid the one race condition that this bookmark prefetching is trying to work around. It even allows future server to make sure everything is generated from the same "transaction" if they become capable of such. The current code was already overwriting the prefetched value with the one in bundle2 anyway. Note that this is not preventing all race conditions in related to bookmark in 'hg pull' it makes nothing better and nothing worse. Reducing the number of listkeys calls will reduce the latency on pull. The pre-fetch is also moved into a discovery step because it seems to belong there. (1) Because all servers not speaking 'pushkey' parts are compatible with the 'HG2X' protocol only.
Thu, 28 May 2015 14:01:53 -0700 pull: document the race condition with bookmark name
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 28 May 2015 14:01:53 -0700] rev 25368
pull: document the race condition with bookmark name It seems valuable to document this in-place to help the next poor soul looking at this code to understand what kind of beast he is currently facing.
Thu, 28 May 2015 13:55:03 -0700 pull: only list remote bookmarks if -B is used to populate pulled heads
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 28 May 2015 13:55:03 -0700] rev 25367
pull: only list remote bookmarks if -B is used to populate pulled heads Listing remote bookmarks results in network traffic and latency. This should be avoided when possible.
Mon, 01 Jun 2015 10:50:15 +0900 i18n-ja: synchronized with 8594d0b3018e stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 01 Jun 2015 10:50:15 +0900] rev 25366
i18n-ja: synchronized with 8594d0b3018e
Sat, 30 May 2015 12:46:30 +0900 hg: explicitly check that peer lookup object has instance() if call failed
Yuya Nishihara <yuya@tcha.org> [Sat, 30 May 2015 12:46:30 +0900] rev 25365
hg: explicitly check that peer lookup object has instance() if call failed If a "thing" is callable but raises TypeError for some reason, a callable object would be returned. Thereafter, unfriendly traceback would be displayed: Traceback (most recent call last): ... File "mercurial/hg.pyc", line 119, in _peerorrepo obj = _peerlookup(path).instance(ui, path, create) AttributeError: 'function' object has no attribute 'instance' Instead, we should show the reason why "thing(path)" didn't work: Traceback (most recent call last): ... File "hggit/__init__.py", line 89, in _local p = urlcls(path).localpath() TypeError: 'NoneType' object is not callable If a "thing" is not callable, it must be a module or an object that implements instance(). If that module didn't have instance(), the error message would be "<unloaded module 'foo'> object is not callable". It doesn't make perfect sense, but it isn't so bad as it can blame which module went wrong.
Mon, 30 Mar 2015 16:23:35 +0900 extensions: show traceback on load failure if --traceback flag is set
Yuya Nishihara <yuya@tcha.org> [Mon, 30 Mar 2015 16:23:35 +0900] rev 25364
extensions: show traceback on load failure if --traceback flag is set Before this patch, there was no handy way to investigate the reason why extension couldn't be loaded. If ui.debug is set, tracebacks of both "hgext.foo" and "foo" are displayed because the first ImportError could occur at very deep dependency module.
Sun, 31 May 2015 14:40:28 +0900 ui: flush stdout before writing traceback to stderr
Yuya Nishihara <yuya@tcha.org> [Sun, 31 May 2015 14:40:28 +0900] rev 25363
ui: flush stdout before writing traceback to stderr Sometimes a traceback message is paired with ui.debug(). This patch makes sure that these messages are displayed in the right order.
Wed, 27 May 2015 10:44:04 -0700 treemanifest: visit directory 'foo' when given e.g. '-X foo/ba?'
Martin von Zweigbergk <martinvonz@google.com> [Wed, 27 May 2015 10:44:04 -0700] rev 25362
treemanifest: visit directory 'foo' when given e.g. '-X foo/ba?' For globs like 'foo/ba?', match._roots() will return 'foo'. Since visitdir(), excludes directories in the excluded roots, it would skip the entire foo directory. This is incorrect, since 'foo/ba?' doesn't mean that everything in foo/ should be exluded. Note that visitdir() is called only from the treemanifest class, so this only affects tree manifests. Fix by adding roots to the set of excluded roots only if there are no excluded patterns. Since 'glob' is the default pattern type for globs, we also need to update some -X patterns in the tests to be of 'path' type to take advantage of the visitdir tricks. For consistency, also update the -I patterns. It seems a little unfortunate that 'foo' in 'hg files -X foo' is considered a pattern because of the implied 'glob' type, but improving that is left for another day.
Fri, 29 May 2015 14:24:50 -0700 phases: fix bug where native phase computation wasn't called
Laurent Charignon <lcharignon@fb.com> [Fri, 29 May 2015 14:24:50 -0700] rev 25361
phases: fix bug where native phase computation wasn't called I forgot to include this change as a previous diff and the native code to compute the phases was never called. The AttributeError was silently caught and the pure implementation was used instead.
Fri, 29 May 2015 17:00:55 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Fri, 29 May 2015 17:00:55 -0500] rev 25360
merge with stable
Wed, 27 May 2015 15:56:10 -0700 record: add default value for operation argument
Laurent Charignon <lcharignon@fb.com> [Wed, 27 May 2015 15:56:10 -0700] rev 25359
record: add default value for operation argument This patch is part of a series of patches to change the recording ui to reflect the operation currently running (commit, shelve, revert ...). This patch adds the default value of the operation argument for record's standard and curses interface to match what is displayed in the interface as of today.
Thu, 28 May 2015 16:41:47 -0700 record: precise documentation
Laurent Charignon <lcharignon@fb.com> [Thu, 28 May 2015 16:41:47 -0700] rev 25358
record: precise documentation This patch improves the documentation of the recordfilter function to explain that we need a translated string for the 'operation' argument.
Wed, 27 May 2015 06:55:32 -0700 test: use both bundle formats in test-bookmarks-pushpull
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 27 May 2015 06:55:32 -0700] rev 25357
test: use both bundle formats in test-bookmarks-pushpull It is valuable to have both formats tested.
(0) -10000 -3000 -1000 -300 -100 -48 +48 +100 +300 +1000 +3000 +10000 tip