From: "Philip Oakley" <philipoakley@iee.org>
To: "Jeff King" <peff@peff.net>, "Junio C Hamano" <gitster@pobox.com>
Cc: "Félix Saparelli" <felix@passcod.name>, git@vger.kernel.org
Subject: Re: [Non-Bug] cloning a repository with a default MASTER branch tries to check out the master branch
Date: Fri, 26 May 2017 22:17:11 +0100 [thread overview]
Message-ID: <FC1CD6DCF3C541CD90DAD51559E1CB64@PhilipOakley> (raw)
In-Reply-To: CEF93B59EA3F49608B41892952454B1D@PhilipOakley
adding and updating an example..
From: "Philip Oakley" <philipoakley@iee.org>
> been trying to keep up...
>
> From: "Jeff King" <peff@peff.net>
>> On Thu, May 25, 2017 at 11:59:24AM -0400, Jeff King wrote:
>>
>>> The just-HEAD case could look like:
>>
>> This patch does work, in the sense that upload-pack advertises the
>> unborn HEAD symref. But the client doesn't actually do anything with it.
>> The capability parsing happens in get_remote_heads(), which passes the
>> data out by adding an annotation to the "struct ref" list. But of course
>> we have no HEAD ref to annotate.
>>
>> So either get_remote_heads() would have to start returning a bogus HEAD
>> ref (with a null sha1, I guess, which all callers would have to
>> recognize). Or clone (and probably "remote set-head -a") would have to
>> start reaching across the transport-module boundary and asking for any
>> symref values for "HEAD". I'm not excited about more special-casing of
>> "HEAD", though. In theory we'd want this for other symrefs in the long
>> run, and it would be nice if clients were ready to handle that (even if
>> the protocol isn't quite there).
>>
>> I dunno. I was thinking there might be a quick tweak, but I'm wondering
>> if this arcane case is worth the restructuring we'd have to do to
>> support it. It only comes up when you've moved the server repo's HEAD to
>> an unborn branch _and_ you have other refs (since otherwise we don't
>> even send capabilities at all!).
>>
>> -Peff
>
> My original comment regarding Felix's report was based on when I was
> looking at the bundle code's disambiguation of refs which matched HEAD's
> sha1. Hence I had a mis-remembered impression that the HEAD - symref
> matching was avaibable.
>
> At that time, Junio had suggested that, at least in the bundle file, the
> HEAD symref could be advertised immediately after a nul on the ref line.
>
> At least for regular git, the sha1and symref value would included in the
> read line, and the current string processing [1] would not notice the
> extra symref data. This extra data could then be read (if present) from
> the end of the line, and the HEAD symref set.
>
> What I then noticed (but didn't report to the list) was the option of
> adding that extra info to the PKLINE protocol.
>
> <from my notes>
> In technical\pack-protocol.txt #L136;158-160
> Reference Discovery:
>
> If HEAD is a valid ref, HEAD MUST appear as the first advertised
> ref. If HEAD is not a valid ref, HEAD MUST NOT appear in the
> advertisement list at all, but other refs may still appear.
> -
>
> So, (for both upload pack, and bundle refs) the place to hide the HEAD is
> after the later ref that HEAD points to.
> e.g.(updating the example at #L147):
> 00441d3fcd5ced445d1abc402225c0b8a1299641f497
> refs/heads/integration\0HEAD[LF]
>
> The potential issue is if there is a passed ref that is HEAD, but that
> HEAD itself isn't passed (especially for bundle)
> <\from my notes>
> --
>
> However given the discussion about an unborn HEAD, the option here would
> be to also pass the NULL sha for the symref and then add the annotation
> 'HEAD' after an extra \0, in the same way that an active symref could be
> annotated with the '\0HEAD'. This would kill two birds with one stone!
>
> These are still protocol changes but should squeeze into the existing
> processing using the \0 trick.
>
> In the absence of the information, and the multi-use of the warning
> function, the current message is possible the best we can get.
>
> Philip
>
> [1] the question would be whether other git versions also use the same
> string processing so could be 'fooled' in the same way? I'd be interested
> to know if that was a possibility.
>
Updating the original example with the suggestion of adding the unborn ref
and a \0HEAD marker (sort order may be an issue if it is the first entry
which 'clashes' with the capability string... - I've been lenient here)
$ git ls-remote git://github.com/passcod/UPPERCASE-NPM.git
efc7dbfd6ca155d5d19ce67eb98603896062f35a refs/heads/MASTER
0000000000000000000000000000000000000000 refs/heads/master\0HEAD
e60ea8e6ec45ec45ff44ac8939cb4105b16477da refs/pull/1/head
f35a73dcb151d336dc3d30c9a2c7423ecdb7bd1c refs/pull/2/head
0d9b3a1268ff39350e04a7183af0add912b686e6 refs/tags/V1.0.0
efc7dbfd6ca155d5d19ce67eb98603896062f35a refs/tags/V1.0.1
--
Philip
next prev parent reply other threads:[~2017-05-27 1:11 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-22 21:42 [Bug] cloning a repository with a default MASTER branch tries to check out the master branch Félix Saparelli
2017-05-23 3:40 ` [Non-Bug] " Junio C Hamano
2017-05-23 23:24 ` Philip Oakley
2017-05-24 14:19 ` Jeff King
2017-05-25 1:36 ` Junio C Hamano
2017-05-25 3:13 ` Junio C Hamano
2017-05-25 15:59 ` Jeff King
2017-05-25 19:11 ` Jeff King
2017-05-25 23:28 ` Junio C Hamano
2017-05-26 20:00 ` Philip Oakley
2017-05-26 21:17 ` Philip Oakley [this message]
2017-05-27 23:55 ` Junio C Hamano
2017-05-28 11:21 ` Philip Oakley
2017-05-28 12:57 ` Junio C Hamano
2017-05-31 4:43 ` Jeff King
2017-05-23 8:01 ` [Bug] " Samuel Lijin
2017-05-23 12:12 ` Jeff King
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=FC1CD6DCF3C541CD90DAD51559E1CB64@PhilipOakley \
--to=philipoakley@iee.org \
--cc=felix@passcod.name \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox