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

Re: [PATCH v2] add test to demonstrate that shallow recursive clones fail

From
Junio C Hamano <gitster@pobox.com>
Date
Dec 1, 2015, 22:22 UTC
Message-ID
<xmqq7fkx7qsa.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<xmqqegf57sfe.fsf@gitster.mtv.corp.google.com>
Junio C Hamano <gitster@pobox.com> writes:
Show 11 quoted lines
> I do not think you would need a new option for this, by the way.
> Just add a new syntax for the LFS of a refspec that cannot possibly
> be confused with existing choices of what can come there (i.e. an
> empty string to denote deletion, or a partial refname), e.g. come up
> with an appropriate string in $sign and allow the following:
>
>     $ git fetch ${sign}c78f7b5ed9dc
>     $ git fetch ${sign}c78f7b5ed9dc:refs/remotes/origin/frotz
>
> to do the obvious thing, perhaps?  We could even allow some form of
> extended SHA-1 expressions with some restrictions ...

Note that the above example already uses a form of extended SHA-1 expression, and I personally do not think we should support it in the very initial version.

This is because the actual object name, if resolved on the remote side, will not be known by "fetch". To support the "resolve on the remote end", we would need protocol extension to have the remote end tell the "fetch", i.e. "you asked to fetch HEAD@{4}, the exact object name for that is 030000f4c81729d2cb862a317e41a60a7111b98d"; otherwise we cannot add a line to FETCH_HEAD and cannot update the RHS of the refspec.

Instead, we should limit us to 40-hex object name and nothing else in the initial incarnation.

i.e.
     $ git fetch ${sign}c78f7b5ed9dc1c6edc8db06ac65860151d54fd07
     $ git fetch ${sign}c78f7b5ed9dc1c6edc8db06ac65860151d54fd07:refs/remotes/origin/frotz

If the remote end (which, as Peff pointed out earlier, already knows how to respond to a fetch request for an exact object when configured to do so) allows such a fetch to go through, "fetch" can (and will) update the ref named by the RHS of storing refspec with the current code, so there is no need to do anything special to support this.

As to ${sign}, I was tempted to say an empty string might be sufficient (i.e. "do not use 40-hex as your branch name"), but it probably is a bad idea. A single dot "." would be a possibility (i.e. a ref component cannot begin with a dot), but squating on it and saying "anything that begins with . must be followed by 40-hex (and in the future by an extended SHA-1)" would rob extensibility from us, so perhaps ".@c78f7b5ed9dc1c6edc8db06ac65860151d54fd07" or something? That is leading "." denotes "this is an extended refspec" and the next character denotes what kind of extended refspec it is. For now we say that "@" denotes "exact object name is used instead of a(n abbreviated) refname".

Previous: Junio C HamanoNext: Stefan Beller
Message 28 of 35 in “add test to demonstrate that shallow recursive clones fail”
  1. add test to demonstrate that shallow recursive clones faillarsxschneider@gmail.com, Nov 12, 2015
  2. Stefan BellerNov 12, 2015
  3. Lars SchneiderNov 15, 2015
  4. Jeff KingNov 13, 2015
  5. Stefan BellerNov 13, 2015
  6. Stefan BellerNov 13, 2015
  7. Jeff KingNov 13, 2015
  8. Jeff KingNov 13, 2015
  9. Stefan BellerNov 14, 2015
  10. Jens LehmannNov 16, 2015
  11. Stefan BellerNov 16, 2015
  12. Jens LehmannNov 16, 2015
  13. Stefan BellerNov 16, 2015
  14. Jens LehmannNov 17, 2015
  15. Stefan BellerNov 17, 2015
  16. Jens LehmannNov 17, 2015
  17. Stefan BellerNov 17, 2015
  18. Jens LehmannNov 17, 2015
  19. Duy NguyenNov 17, 2015
  20. Jeff KingNov 17, 2015
  21. Duy NguyenNov 18, 2015
  22. Jeff KingNov 18, 2015
  23. Stefan BellerNov 18, 2015
  24. Junio C HamanoNov 30, 2015
  25. Stefan BellerDec 1, 2015
  26. Duy NguyenDec 1, 2015
  27. Junio C HamanoDec 1, 2015
  28. Junio C HamanoDec 1, 2015
  29. Stefan BellerDec 3, 2015
  30. Junio C HamanoDec 4, 2015
  31. Junio C HamanoDec 4, 2015
  32. Duy NguyenDec 4, 2015
  33. Lars SchneiderNov 15, 2015
  34. Jeff KingNov 17, 2015
  35. Jeff KingNov 19, 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.