Re: [PATCH] glossary: describe "worktree"
- From
Han-Wen Nienhuys <hanwen@google.com>
- Date
- Feb 10, 2022, 18:07 UTC
- Message-ID
- <CAFQ2z_OgVcaty1wMX0O0mj-PYSAphKAkXgTCW+uJKDAuCwLn4w@mail.gmail.com>
- In-Reply-To
- <xmqqiltmwufw.fsf@gitster.g>
On Thu, Feb 10, 2022 at 5:36 PM Junio C Hamano <gitster@pobox.com> wrote:
Show 24 quoted lines
> >> One thing that makes me worried somewhat is what I did not touch, > >> namely, how pseudo refs are defined. I know MERGE_HEAD is very > >> special and it may be impossible to coax it into refs API for > >> writing, so the text there makes sense for it, but there are > >> other all-caps-and-directly-under-dot-git-directory files like > >> ORIG_HEAD and CHERRY_PICK_HEAD that are written using the refs > >> API, so the description would have to be updated there. > > > > I'm not quite following; why would the description need to be updated? > > Sure MERGE_HEAD is written without using the refs API, but we didn't > > mention how the pseduorefs were written in the description, and all of > > MERGE_HEAD, CHERRY_PICK_HEAD, ORIG_HEAD, REVERT_HEAD get written > > per-worktree so doesn't "pseudorefs like MERGE_HEAD" cover it as far > > as the reader is concerned? > > Here is how pseudo refs are defined. > > [[def_pseudoref]]pseudoref:: > 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. Pseudorefs both have names that 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
refs.c says
if (is_pseudoref_syntax(refname))
return REF_TYPE_PSEUDOREF;Ie. ref_type("HEAD") == REF_TYPE_PSEUDOREFThis may be partly my fault (commit 55dd8b910 "Make HEAD a PSEUDOREF rather than PER_WORKTREE.").
From the source code I had only understood that pseudorefs are ALLCAPS names and are in the toplevel namespace. (HEAD, FETCH_HEAD and MERGE_HEAD have special-cased support in various places).
Is this glossary the official definition of what things are? If so, the source code should refer to there. If not -except for confusion- how bad is it if the info in the glossary is inaccurate?
Show 6 quoted lines
> What worries me the most is that we cannot simply say "all-caps > names that end with '_HEAD' all behave like refs except that they > will not be symrefs without reflog." MERGE_HEAD is the only known > exception if I am not mistaken, and I am OK to single it out as an > oddball. The current description however gives that there are a lot > more differences _among_ pseudorefs.
It might be possible to add this extra info the reftable format as a further subtype of the ref record. We'd have to update the JGit implementation, though.
-- Han-Wen Nienhuys - Google Munich I work 80%. Don't expect answers from me on Fridays. -- Google Germany GmbH, Erika-Mann-Strasse 33, 80636 Munich Registergericht und -nummer: Hamburg, HRB 86891 Sitz der Gesellschaft: Hamburg Geschäftsführer: Paul Manicle, Halimah DeLaine Prado