Odd httpheader=1024 required for Phabricator

Augie Fackler raf at durin42.com
Wed Feb 12 06:50:32 UTC 2020



> On Feb 11, 2020, at 16:32, Makarius <makarius at sketis.net> wrote:
> 
> On 11/02/2020 03:20, Augie Fackler wrote:
>> I guess I'm not sure what's going on here. https://www.mercurial-scm.org/repo/hg/rev/5cda0ce05c42 is the revision that introduced that, but I'm not sure why you need to do anything /to phabricator/ unless it's trying (poorly) to pretend to be an hg server. Is it not just blindly proxying the hg protocol from your hg binary?
> 
> Thanks. This hint has helped me to look in the right spots.
> 
> Phabricator essentially starts a command-line process to learn about the
> server capabilities like this:
> 
>  echo capabilities | hg -R .../test-repo serve --stdio
> 
> It uses the result for its own http communication. In the output above, there
> used to be httpheader=1024 until 4.0.2, but it has disappeared in 4.1.
> 
> 
> See also the Phabricator sources:
> 
> https://github.com/phacility/phabricator/blob/master/src/applications/diffusion/controller/DiffusionServeController.php#L781
> 
> https://github.com/phacility/phabricator/blob/master/src/applications/diffusion/controller/DiffusionServeController.php#L838
> 
> https://github.com/phacility/phabricator/blob/master/src/applications/diffusion/protocol/DiffusionMercurialWireProtocol.php#L107
> 
> The latter contains further comments about slightly odd censorship of the
> capabilities. This is also the place where the workaround is inserted, see
> again https://isabelle-dev.sketis.net/T8
> 
> 
> A bisection over the hg repository yields the following relevant changeset:
> 
> changeset:   30563:e118233172fe
> user:        Gregory Szorc <gregory.szorc at gmail.com>
> date:        Mon Nov 28 20:46:42 2016 -0800
> files:       mercurial/wireproto.py tests/test-ssh-bundle1.t tests/test-ssh.t
> description:
> wireproto: only advertise HTTP-specific capabilities to HTTP peers (BC)
> 
> Previously, the capabilities list was protocol agnostic and we
> advertised the same capabilities list to all clients, regardless of
> transport protocol.
> 
> A few capabilities are specific to HTTP. I see no good reason why we
> should advertise them to SSH clients. So this patch limits their
> advertisement to HTTP clients.
> 
> This patch is BC, but SSH clients shouldn't be using the removed
> capabilities so there should be no impact.
> 
> 
> What means "BC"?

"breaking change" or "behavior change" depending who you ask. :)

> Maybe Phabricator is a good reason to keep the full information?

Not especially. They're doing it wrong assuming that the --stdio protocol is compatible with http, and we've told them that more than once and they've responded...negatively. If someone wanted to try and figure out a way to have phabricator do the right thing (invoke hg's WSGI application, probably via CGI?) that would probably help. I'd certainly be open to mentoring someone doing that work, but I can't justify spending time on it myself.

> Do you think you can refine that for a future release of Mercurial?

I'm not sure what you're asking for here...

> 
> In contrast, it is probably difficult to get a patch accepted by the
> Phabricator project, because they are only using rather old hg 2.8.2 for their
> main installation, and 2.6.2, 3.5.1 in their tests:
> https://github.com/phacility/phabricator/blob/master/src/applications/diffusion/protocol/__tests__/DiffusionMercurialWireProtocolTests.php
> 
> 
> 	Makarius




More information about the Mercurial mailing list