From: Junio C Hamano <gitster@pobox.com>
To: Elijah Newren <newren@gmail.com>
Cc: Git Mailing List <git@vger.kernel.org>,
Derrick Stolee <stolee@gmail.com>
Subject: Re: [PATCH] glossary: describe "worktree"
Date: Thu, 10 Feb 2022 08:35:47 -0800 [thread overview]
Message-ID: <xmqqiltmwufw.fsf@gitster.g> (raw)
In-Reply-To: <CABPp-BHrFb_AA2OAiR7Bmq7vQuyG2Wme_PdjPdY8j-tp3VJfJg@mail.gmail.com> (Elijah Newren's message of "Thu, 10 Feb 2022 07:50:37 -0800")
Elijah Newren <newren@gmail.com> writes:
>> 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
optionally contain 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.
Points that may need to be looked at in the world where files
backend is not the only ref backend are:
- "are ... files under `$GIT_DIR`" may no longer be true, once some
of them are stored in reftable, for example.
- "followed by whitespace" may be an irrelevant detail for the
purpose of this paragraph.
- CHERRY_PICK_HEAD, as written in sequencer.c::do_pick_commit(),
use update_ref() to write a named file out, so "followed by
whitesspace" (and other cruft, like MERGE_HEAD does) certainly
does not apply.
- Also "cannot be updated through the normal ref update machinery"
is no longer true. sequencer.c::do_pick_commit() even calls
update_ref() with REF_NO_DEREF to ensure "cannot be symbolic
refs".
- "never have reflogs" would make sense for the current set of
pseudorefs (does reflog on CHERRY_PICK_HEAD, for example, have
real use case?), but I do not know if it stays that way. I do
not care too deeply either way, but I want to avoid over
specifying things.
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.
next prev parent reply other threads:[~2022-02-10 16:35 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-10 2:19 [PATCH] glossary: describe "worktree" Junio C Hamano
2022-02-10 14:40 ` Derrick Stolee
2022-02-10 15:50 ` Elijah Newren
2022-02-10 16:35 ` Junio C Hamano [this message]
2022-02-10 17:03 ` Elijah Newren
2022-02-10 18:07 ` Han-Wen Nienhuys
2022-02-10 18:28 ` Junio C Hamano
2022-02-10 18:36 ` Han-Wen Nienhuys
2022-02-10 19:14 ` Junio C Hamano
2022-02-17 10:00 ` Han-Wen Nienhuys
2022-02-17 19:10 ` Junio C Hamano
2022-02-18 20:25 ` Ævar Arnfjörð Bjarmason
2022-02-18 20:50 ` Junio C Hamano
2022-02-10 19:17 ` Junio C Hamano
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqiltmwufw.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=newren@gmail.com \
--cc=stolee@gmail.com \
/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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).