git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [RFCv2 10/16] transport: connect_setup appends protocol version number

From
Stefan Beller <sbeller@google.com>
Date
Jun 2, 2015, 22:09 UTC
Message-ID
<CAGZ79kbnX_kyuvj73PGcO7OBOj7CfdouARrqNWEkCnUfdN=DqQ@mail.gmail.com>
In-Reply-To
<xmqq8uc123n5.fsf@gitster.dls.corp.google.com>
On Tue, Jun 2, 2015 at 2:37 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 37 quoted lines
> Stefan Beller <sbeller@google.com> writes:
>
>> Signed-off-by: Stefan Beller <sbeller@google.com>
>> ---
>>
>> Notes:
>>     name it to_free
>>
>>  transport.c | 17 +++++++++++++++--
>>  1 file changed, 15 insertions(+), 2 deletions(-)
>>
>> diff --git a/transport.c b/transport.c
>> index 651f0ac..b49fc60 100644
>> --- a/transport.c
>> +++ b/transport.c
>> @@ -496,15 +496,28 @@ static int set_git_option(struct git_transport_options *opts,
>>  static int connect_setup(struct transport *transport, int for_push, int verbose)
>>  {
>>       struct git_transport_data *data = transport->data;
>> +     const char *remote_program;
>> +     char *to_free = 0;
>
>         char *to_free = NULL;
>
>> +     remote_program = (for_push ? data->options.receivepack
>> +                                : data->options.uploadpack);
>> +
>> +     if (transport->smart_options->transport_version >= 2) {
>> +             to_free = xmalloc(strlen(remote_program) + 12);
>> +             sprintf(to_free, "%s-%d", remote_program,
>> +                     transport->smart_options->transport_version);
>> +             remote_program = to_free;
>> +     }
>
> Hmph, so everybody else thinks it is interacting with 'upload-pack',
> and this is the only function that knows it is actually talking with
> 'upload-pack-2'?
Yes.
Show 5 quoted lines
>
> I am wondering why there isn't a separate helper function that
> munges data->options.{uploadpack,receivepack} fields based on
> the value of transport_version that is called _before_ this function
> is called.
That makes sense.
>
> Also, how does this interact with the name of the program the end
> user can specify via "fetch --upload-pack=<program name>" option?

You'd specify --upload-pack=foo-frotz and --transport-version=2 and it would look for foo-frotz-2 instead.

The problem IMHO is we have quite a few places where the upload-pack binary path can be configured. Either as a command line option or as a repository configuration.

And the way we're currently architecting the next protocol, the version is encoded in the file name, which makes sense (an old binary will not accept a new protocol), so what should happen when

* there is a repository configuration "upload-pack-custom" for upload-pack
   for historic reasons. When just switching to a new version, you would need
   to add a "upload-pack-custom-2" binary on the server side anyway
* additionally to the configured value you want to play around with the new
  protocol, so would you rather just say "--transport-version=2" or also need
  to have some sort of "--upload-pack=upload-pack-custom-another-path"
  involved? It's easy to forget the second option I believe.
* the user specifies
"--upload-pack=custom-upload-pack-which-talks-version1" and
 "--transport-version=2" together. This will fail, but at which stage do we
  want to fail?

All these questions lead me to think it's maybe better to make the rest of Git unaware of the added "-${version}" string and pretend we would be talking to upload-pack instead.

Previous: Junio C HamanoNext: Junio C Hamano
Message 28 of 44 in “[RFCv2 00/16] Protocol version 2”
  1. Stefan BellerJun 2, 2015
  2. 01/16 stringlist: add from_space_separated_stringStefan Beller, Jun 2, 2015
  3. Duy NguyenJun 2, 2015
  4. Eric SunshineJun 2, 2015
  5. Stefan BellerJun 2, 2015
  6. 02/16 upload-pack: make client capability parsing code a separate functionStefan Beller, Jun 2, 2015
  7. 03/16 connect: rewrite feature parsing to work on string_listStefan Beller, Jun 2, 2015
  8. Junio C HamanoJun 2, 2015
  9. 04/16 upload-pack-2: Implement the version 2 of upload-packStefan Beller, Jun 2, 2015
  10. Junio C HamanoJun 2, 2015
  11. Stefan BellerJun 2, 2015
  12. 05/16 remote.h: Change get_remote_heads return to voidStefan Beller, Jun 2, 2015
  13. Junio C HamanoJun 2, 2015
  14. Stefan BellerJun 2, 2015
  15. Junio C HamanoJun 2, 2015
  16. 06/16 remote.h: add new struct for optionsStefan Beller, Jun 2, 2015
  17. Junio C HamanoJun 2, 2015
  18. Stefan BellerJun 2, 2015
  19. Junio C HamanoJun 2, 2015
  20. 07/16 transport: add infrastructure to support a protocol version numberStefan Beller, Jun 2, 2015
  21. 08/16 transport: select transport version via command line or configStefan Beller, Jun 2, 2015
  22. 09/16 remote.h: add get_remote_capabilities, request_capabilitiesStefan Beller, Jun 2, 2015
  23. Junio C HamanoJun 2, 2015
  24. 10/16 transport: connect_setup appends protocol version numberStefan Beller, Jun 2, 2015
  25. Duy NguyenJun 2, 2015
  26. Stefan BellerJun 2, 2015
  27. Junio C HamanoJun 2, 2015
  28. Stefan BellerJun 2, 2015
  29. Junio C HamanoJun 2, 2015
  30. 11/16 remote: have preselect_capabilitiesStefan Beller, Jun 2, 2015
  31. Junio C HamanoJun 2, 2015
  32. 12/16 transport: get_refs_via_connect exchanges capabilities before refs.Stefan Beller, Jun 2, 2015
  33. Junio C HamanoJun 2, 2015
  34. Stefan BellerJun 2, 2015
  35. 13/16 fetch-pack: use the configured transport protocolStefan Beller, Jun 2, 2015
  36. Duy NguyenJun 2, 2015
  37. Duy NguyenJun 2, 2015
  38. Ilari LiusvaaraJun 2, 2015
  39. 14/16 t5544: add a test case for the new protocolStefan Beller, Jun 2, 2015
  40. Eric SunshineJun 3, 2015
  41. 15/16 Documentation/technical/pack-protocol: Mention http as possible protocolStefan Beller, Jun 2, 2015
  42. Junio C HamanoJun 2, 2015
  43. Junio C HamanoJun 2, 2015
  44. 16/16 Document protocol version 2Stefan Beller, Jun 2, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.