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

Re: [PATCH 1/9] refs: Introduce pseudoref and per-worktree ref concepts

From
David Turner <dturner@twopensource.com>
Date
Jul 24, 2015, 20:13 UTC
Message-ID
<1437768818.1141.14.camel@twopensource.com>
In-Reply-To
<xmqqio99mkfp.fsf@gitster.dls.corp.google.com>
On Fri, 2015-07-24 at 12:20 -0700, Junio C Hamano wrote:
Show 12 quoted lines
> David Turner <dturner@twopensource.com> writes:
> 
> > +[[def_pseudoref]]pseudoref::
> > +	Files under `$GIT_DIR` whose names are all-caps, and that
> > +	contain a line consisting of a <<def_sha1,SHA-1>> followed by
> > +	a newline, and optionally some additional data.  `MERGE_HEAD`
> > +	and `CHERRY_PICK_HEAD` are examples.  Unlike...
> 
> I wonder if you meant to include FETCH_HEAD in this category (I am
> not complaining about not having it listed as an example).  If you
> did mean to include FETCH_HEAD, then "followed-by a newline" must
> be rethought.
I guess "followed by whitespace"?
> Documentation pedant might say that the above definition would throw
> HEAD into this category.  s/all-caps,/all-caps (except "HEAD"),/ or
> something like that may be needed to prevent them from making useless
> noise.

I meant "and that contain a line consisting of a SHA" to exclude HEAD, but I need to add a "always" in there, since detached HEAD would otherwise apply. That is, it is an additional condition on what a pseudoref is.

Something like the following?
	Pseudorefs are a class of files under `$GIT_DIR` which behave
	like refs for the purposes of rev-parse, but which are treated
	specially by git.  Psuedorefs both have names are all-caps,
	and always start with a line consisting of a
	<<def_sha1,SHA-1>> followed by whitespace.  So, HEAD is not a
	pseudoref, because it is sometimes a symbolic ref.  They might
	optionally some additional data.  `MERGE_HEAD` and
	`CHERRY_PICK_HEAD` are examples.  Unlike
	<<def_per_worktree_ref,per-worktree refs>>, these files cannot
	be symbolic refs, and never have reflogs.  They also cannot be
	updated through the normal ref update machinery.  Instead,
	they are updated by directly writing to the files.  However,
	they can be read as if they were refs, so `git rev-parse
	MERGE_HEAD` will work.
Previous: Junio C HamanoNext: Junio C Hamano
Message 5 of 20 in “Pseudorefs”
  1. 0/9 PseudorefsDavid Turner, Jul 24, 2015
  2. 1/9 refs: Introduce pseudoref and per-worktree ref conceptsDavid Turner, Jul 24, 2015
  3. Eric SunshineJul 24, 2015
  4. Junio C HamanoJul 24, 2015
  5. David TurnerJul 24, 2015
  6. Junio C HamanoJul 24, 2015
  7. Philip OakleyJul 24, 2015
  8. David TurnerJul 24, 2015
  9. 2/9 notes: replace pseudorefs with real refsDavid Turner, Jul 24, 2015
  10. 3/9 bisect: do not use update-ref for BISECT_HEADDavid Turner, Jul 24, 2015
  11. 4/9 tests: treat FETCH_HEAD as a pseudorefDavid Turner, Jul 24, 2015
  12. 5/9 tests: use --create-reflog option to git update-refDavid Turner, Jul 24, 2015
  13. 6/9 pseudorefs: create and use pseudoref update and delete functionsDavid Turner, Jul 24, 2015
  14. Junio C HamanoJul 24, 2015
  15. David TurnerJul 24, 2015
  16. Junio C HamanoJul 24, 2015
  17. 7/9 am/rebase: update pseudorefs by writing filesDavid Turner, Jul 24, 2015
  18. 8/9 rebase: use write_pseudorefDavid Turner, Jul 24, 2015
  19. 9/9 refs: forbid pseudoref updates through ref update APIDavid Turner, Jul 24, 2015
  20. Michael HaggertyAug 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.