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

Re: [PATCH 4/4] server info: Add HEAD to info/refs

From
Junio C Hamano <junkio@cox.net>
Date
Apr 27, 2007, 03:51 UTC
Message-ID
<7vhcr2qxtj.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<20070427020608.22991.29273.stgit@rover>
Petr Baudis <pasky@suse.cz> writes:
> For some reason, HEAD was not listed in info/refs until now, which means
> that git-ls-remote does not return it for dumb transports while the native
> transports show it. It would be nice to have it because of git-mirror and
> possibly other nifty stuff.

Hmmm. I know why you want to do this, but honestly speaking, this is going somewhat backwards. Maybe one step back, before going two steps forward.

I always considered it was a bug that the native transport sends SHA-1 of HEAD after dereferencing the symref, instead of saying which branch it points at. You would understand (or more likely, "remember", as I suspect you have in the past looked at what git-clone does and git-clone-pack used to do) what yuck factor this introduced to git-clone.

The info/refs files is designed to mimick peek-remote output (I know you looked at ls-remote implementation that has "case-esac" that switches on transport, whose output is piped to the same filtering loop), but HEAD SHA-1 is not needed in this file to support dumb transports, as we try to read HEAD symref by hand when cloning over http.

Longer term, I would want to have a protocol extension to the native stuff to additionally send the symref information, so that git-clone does not have to guess. At the same time, we would probably want to update the output from git-peek-remote so that it can say which branch HEAD points at more explicitly, and in such way that does not break older clients too badly. We would need to update the file format of info/refs at the same time if we update git-peek-remote.

How about proceeding along these lines?
 * We take this patch to add HEAD SHA-1 to info/refs;
 * We add --symref option to git-ls-remote; without the option,
   its last "while read sha1 path" loop filters out lines that
   begin with "->";
 * We add native protocol extension to let upload-pack to say
   what HEAD symref points at, in addition to the SHA-1 HEAD
   points at.  Update peek-remote to show this information like
   this:
	->refs/heads/master<TAB>HEAD<LF>
        0d5e6c97...<TAB>HEAD<LF>
	...
 * We also enhance update-server-info to generate similar ->
   information.
 * We update git-clone to use --symref when it calls
   git-ls-remote; if it can figure out which branch the remote
   HEAD points at (because the remote side has newer git), it
   uses that information to set the HEAD branch instead of
   guessing.
Hmm?
Previous: Petr BaudisNext: Petr Baudis
Message 6 of 13 in “Git.pm: config_boolean() -> config_bool()”
  1. 1/4 Git.pm: config_boolean() -> config_bool()Petr Baudis, Apr 27, 2007
  2. 2/4 Git.pm: Add remote_refs() git-ls-remote frontendPetr Baudis, Apr 27, 2007
  3. 3/4 [PATCH] git-mirror - exactly mirror another repositoryPetr Baudis, Apr 27, 2007
  4. Shawn O. PearceApr 27, 2007
  5. 4/4 server info: Add HEAD to info/refsPetr Baudis, Apr 27, 2007
  6. Junio C HamanoApr 27, 2007
  7. Petr BaudisApr 27, 2007
  8. Junio C HamanoApr 27, 2007
  9. Junio C HamanoApr 28, 2007
  10. Git.pm: config_boolean() -> config_bool()Petr Baudis, May 9, 2007
  11. Petr BaudisMay 9, 2007
  12. Junio C HamanoMay 10, 2007
  13. Junio C HamanoMay 9, 2007

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.