narrow: use narrow_widen wireproto command to widen in case of ellipses
Few releases ago, we introduce narrow_widen wireproto command to be used to widen
narrow repositories. Before this patch, that was used in non-ellipses cases
only. In ellipses cases, we still do exchange.pull() which can pull more data
than required.
After this patch, the client will first check whether server supports doing
ellipses widening using wireproto command or not by checking server's wireproto
capability. If the server is upto date and support latest ellipses capability,
we call the wireproto command. Otherwise we fallback to exchange.pull() like
before.
The compat code make sure that things works even if one of the client or server
is old. The initial version of this patch does not had this compat code. It's
added to help Google release things smoothly internally. I plan to drop the
compat code before the upcoming major release.
Due to change to wireproto command, the code looks a bit dirty, next patches
will clean that up.
Differential Revision: https://phab.mercurial-scm.org/D6436
== New Features ==
* New config `commands.commit.post-status` shows status after successful
commit.
== New Experimental Features ==
* New config `experimental.log.topo` makes `hg log -G` use
topological sorting. This is especially useful for aliases since it
lets the alias accept an `-r` option while still using topological
sorting with or without the `-r` (unlike if you use the `sort(...,
topo)` revset).
== Bug Fixes ==
* issue4292: "hg log and {files} {file_adds} {file_mods} {file_dels}
in template show wrong files on merged revision". See details in
"Backwards Compatibility Changes".
== Backwards Compatibility Changes ==
* Removed (experimental) support for log graph lines mixing
parent/grandparent styles. Setting
e.g. `experimental.graphstyle.parent = !` and
`experimental.graphstyle.grandparent = 3.` would use `!` for the
first three lines of the graph and then `.`. This is no longer
supported.
* If `ui.origbackuppath` had been (incorrectly) configured to point
to a file, we will now replace that file by a directory and put
backups in that directory. This is similar to how we would
previously replace files *in* the configured directory by
subdirectories.
* Template keyword `{file_mods}`, `{file_adds}`, and `{file_dels}`
have changed behavior on merge commits. They used to be relative to
the first parent, but they now consider both parents. `{file_adds}`
shows files that exists in the commit but did not exist in either
parent. `{file_dels}` shows files that do not exist in the commit
but existed in either parent. `{file_mods}` show the remaining
files from `{files}` that were not in the other two
sets.
== Internal API Changes ==
* Matchers are no longer iterable. Use `match.files()` instead.
* `match.visitdir()` and `match.visitchildrenset()` now expect the
empty string instead of '.' to indicate the root directory.
* `util.dirs()` and `util.finddirs()` now include an entry for the
root directory (empty string).