Skip to content
Snippets Groups Projects
Commit a86d21e70b2b authored by Gregory Szorc's avatar Gregory Szorc
Browse files

exchangev2: start to implement pull with wire protocol v2

Wire protocol version 2 will take a substantially different
approach to exchange than version 1 (at least as far as pulling
is concerned).

This commit establishes a new exchangev2 module for holding
code related to exchange using wire protocol v2. I could have
added things to the existing exchange module. But it is already
quite big. And doing things inline isn't in question because
the existing code is already littered with conditional code
for various states of support for the existing wire protocol
as it evolved over 10+ years. A new module gives us a chance
to make a clean break.

This approach does mean we'll end up writing some duplicate
code. And there's a significant chance we'll miss functionality
as code is ported. The plan is to eventually add #testcase's
to existing tests so the new wire protocol is tested side-by-side
with the existing one. This will hopefully tease out any
features that weren't ported properly. But before we get there,
we need to build up support for the new exchange methods.

Our journey towards implementing a new exchange begins with pulling.
And pulling begins with discovery.

The discovery code added to exchangev2 is heavily drawn from
the following functions:

* exchange._pulldiscoverychangegroup
* discovery.findcommonincoming

For now, we build on top of existing discovery mechanisms. The
new wire protocol should be capable of doing things more efficiently.
But I'd rather defer on this problem.

To foster the transition, we invent a fake capability on the HTTPv2
peer and have the main pull code in exchange.py call into exchangev2
when the new wire protocol is being used.

Differential Revision: https://phab.mercurial-scm.org/D4480
parent a5de21c9e370
No related branches found
No related tags found
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment