From: Junio C Hamano <gitster@pobox.com>
To: shejialuo <shejialuo@gmail.com>
Cc: git@vger.kernel.org, Patrick Steinhardt <ps@pks.im>,
Karthik Nayak <karthik.188@gmail.com>
Subject: Re: [PATCH v4 4/5] ref: add symref content check for files backend
Date: Wed, 18 Sep 2024 13:19:13 -0700 [thread overview]
Message-ID: <xmqqldzobtq6.fsf@gitster.g> (raw)
In-Reply-To: <ZuRzzwZds8ys-JEN@ArchLinux> (shejialuo@gmail.com's message of "Sat, 14 Sep 2024 01:18:07 +0800")
shejialuo <shejialuo@gmail.com> writes:
Expect that people do not read the body of the message as completing
a paragrpah the title started. I.e. ...
> We have already introduced the checks for regular refs. There is no need
> to check the consistency of the target which the symref points to.
> Instead, we just need to check the content of the symref itself.
... this needs a bit of preamble, like
We have code that check regular ref contents, but we do not yet
check contents of symbolic refs.
> A regular file is accepted as a textual symref if it begins with
> "ref:", followed by zero or more whitespaces, followed by the full
> refname, followed only by whitespace characters. We always write
> a single SP after "ref:" and a single LF after the refname, but
> third-party reimplementations of Git may have taken advantage of the
> looser syntax. Put it more specific, we accept the following contents
> of the symref:
>
> 1. "ref: refs/heads/master "
> 2. "ref: refs/heads/master \n \n"
> 3. "ref: refs/heads/master\n\n"
>
> Thus, we could reuse "refMissingNewline" and "trailingRefContent"
> FSCK_INFOs to do the same retroactive tightening as we introduce for
> regular references.
>
> But we do not allow any other trailing garbage. The followings are bad
> symref contents which will be reported as fsck error by "git-fsck(1)".
This description needs to be updated, as it is unclear if you are
talking about errors we already detect, or if you are planning to
update fsck to notice and report these errors.
> 1. "ref: refs/heads/master garbage\n"
> 2. "ref: refs/heads/master \n\n\n garbage "
>
> And we introduce a new "badReferentName(ERROR)" fsck message to report
> above errors to the user.
OK.
> In order to check the content of the symref, create a function
> "files_fsck_symref_target". It will first check whether the "referent"
> is under the "refs/" directory, if not, we will report "escapeReferent"
> fsck error message to notify the user this situation.
>
> Then, we will first check whether the symref content misses the newline
> by peeking the last byte of the "referent" to see whether it is '\n'.
"Then, we will first" -> "Then it checks" or something.
You already consumed "first" for the check to limit the referent to
those under "refs/" hierarchy.
> And we will remember the untrimmed length of the "referent" and call
> "strbuf_rtrim()" on "referent". Then, we will call "check_refname_format"
> to check whether the trimmed referent format is valid. If not, we will
> report to the user that the symref points to referent which has invalid
> format. If it is valid, we will compare the untrimmed length and trimmed
> length, if they are not the same, we need to warn the user there is some
> trailing garbage in the symref content.
That is an implementation detail of what you did. But if the
implementation were buggy and did not exactly what you intended to
do, the above description gives no information to help others to fix
it up so that it works as you intended it to work, because you do
not explain it.
So what did you want to achieve in the third step (the first being
"limit to refs/ hiararchy", the second being "no incomplete lines
allowed")?
Third, we want to make sure that the contents of a textual
symref MUST have a single LF after the target refname and
NOTHING ELSE.
or something.
> At last, we need to check whether the referent is a directory. We cannot
"a directory" -> "an existing directory"?
I am not comfortable to see the word "directory" used in this
proposed log message, as some refs could be stored in the packed
backend and are referenced by the symbolic ref you are inspecting
(this comment also refers to the "refs/ directory" you mentioned
earlier as "the first check").
Lastly, a symbolic ref MUST either point to an existing ref,
or if the referent does not exist, it MUST NOT be a leading
subpath for another existing ref (e.g., when "refs/heads/main"
exists, a symbolic ref that points at "refs/heads" is a no-no).
or something (but again, I am open to a phrasing better than
"subpath").
Design question. What do we want to do when we have no loose refs
under the "refs/heads/historical/" hiearchy, (i.e. all of them are
in packed-refs file) hence ".git/refs/heads/historical" directory
does not exist on the filesystem. And a symbolic ref points at
"refs/heads/historical". Shouldn't we give the same error whether
the .git/refs/heads/historical directory exist or not, as long as
the refs/heads/historical/main branch exists (in the packed-refs
backend)?
> diff --git a/Documentation/fsck-msgids.txt b/Documentation/fsck-msgids.txt
> index 8827137ef0..03bcb77972 100644
> --- a/Documentation/fsck-msgids.txt
> +++ b/Documentation/fsck-msgids.txt
> @@ -28,6 +28,12 @@
> `badRefName`::
> (ERROR) A ref has an invalid format.
>
> +`badReferentFiletype`::
> + (ERROR) The referent of a symref has a bad file type.
> +
> +`badReferentName`::
> + (ERROR) The referent name of a symref is invalid.
> +
> `badTagName`::
> (INFO) A tag has an invalid format.
>
> @@ -49,6 +55,9 @@
> `emptyName`::
> (WARN) A path contains an empty name.
>
> +`escapeReferent`::
> + (ERROR) The referent of a symref is outside the "ref" directory.
I am not sure starting this as ERROR is wise. Users and third-party
tools make creative uses of the system and I cannot offhand think of
an argument why it should be forbidden to create a symbolic link to
our own HEAD or to some worktree-specific ref in another worktree.
> + size_t len = referent->len - 1;
> + struct stat st;
> + int ret = 0;
> +
> + if (!starts_with(referent->buf, "refs/")) {
> + ret = fsck_report_ref(o, report,
> + FSCK_MSG_ESCAPE_REFERENT,
> + "points to ref outside the refs directory");
> + goto out;
> + }
> +
> + if (referent->buf[referent->len - 1] != '\n') {
As you initialized "len" to "referent->len-1" earlier, wouldn't it
more natural to use it here? That would match the incrementing of
len++ later in this block.
> + ret = fsck_report_ref(o, report,
> + FSCK_MSG_REF_MISSING_NEWLINE,
> + "missing newline");
> + len++;
> + }
Having said that, the above should be simplified more like:
* declare but not initialize "len". better yet, declare "orig_len"
and leave it uninitialized.
* do not touch "len++" in the above block (actually, you can
discard the above "if(it does not end with LF)" block, see
below).
* instead grab "referent->len" in "len" (or "orig_len") immediately
before you first modify referent, i.e. before strbuf_rtrim() call.
orig_len = referent->len;
orig_last_byte = referent->buf[orig_len - 1];
> + strbuf_rtrim(referent);
> + if (check_refname_format(referent->buf, 0)) {
> + ret = fsck_report_ref(o, report,
> + FSCK_MSG_BAD_REFERENT_NAME,
> + "points to refname with invalid format");
Similar to an earlier step, the message does not give any more
information than the enum. Wouldn't the user who got this error
want to learn what referent->buf said and which part of it was bad
in the same message, instead of having to look it up on their own
after fsck finishes?
> + goto out;
> + }
At this point we know check_refname_format() is happy with what is
left after rtrimming the referent. There are four cases:
- rtrim() did not trim anything (orig_len == referent->len); the file
lacked the terminating LF.
- rtrim() trimmed one byte (orig_len - 1 == referent->len) and
the byte was not LF (orig_last_byte != '\n'). The file lacked
the terminating LF.
- rtrim() trimmed exactly one byte (orig_len - 1 == referent->len)
and the byte was LF (orig_last_byte == '\n'). There is no error.
- all other cases, i.e., rtrim() trimmed two or more bytes. The
file had trailing whitespaces after a valid referent that passed
check_refname_format().
So in short,
if (referent->len == orig_len ||
referent->len == orig_len - 1 && orig_last_byte != '\n') {
FSCK_MSG_REF_MISSING_NEWLINE;
} else if (referent->len < orig_len - 1) {
FSCK_MSG_REF_TRAILING_WHITESPACE;
}
can replace the next block you wrote, and we can also remove the
earlier "it is an error if it does not end with '\n'", I think.
> + if (len != referent->len) {
> + ret = fsck_report_ref(o, report,
> + FSCK_MSG_TRAILING_REF_CONTENT,
> + "trailing garbage in ref");
As check_refname_format() was happy, the difference between orig_len
and referent->len are only coming from trailing whitespaces, i.e. it
is not that it had arbitrary garbage. Shouldn't we be more explicit
about that?
> + /*
> + * Dangling symrefs are common and so we don't report them.
> + */
> + if (lstat(referent_path->buf, &st)) {
> + if (errno != ENOENT) {
> + ret = error_errno(_("unable to stat '%s'"),
> + referent_path->buf);
> + }
> + goto out;
> + }
> +
> + /*
> + * We cannot distinguish whether "refs/heads/a" is a directory or not by
> + * using "check_refname_format(referent->buf, 0)". Instead, we need to
> + * check the file type of the target.
> + */
> + if (S_ISDIR(st.st_mode)) {
> + ret = fsck_report_ref(o, report,
> + FSCK_MSG_BAD_REFERENT_FILETYPE,
> + "points to the directory");
> + goto out;
> + }
If referent_path->buf refers to "refs/heads/historical/", and all
the branches under the hierarchy have been sent to packed-refs,
then this check will not trigger.
I wonder if this check is the right thing to enforce in the first
place, though.
As far as the end user is concerned, refs/heads/historical/master
branch stil exists, and there is no refs/heads/historical branch, so
such a symbolic ref, for all intents and purposes, is the same as
any other dangling symbolic refs, no?
Of course, "git update-ref SUCH_A_SYMREF HEAD" will complain because
there is refs/heads/historical, with something like
"refs/heads/historical/master" exists, cannot create "refs/heads/historical"
but that is to be expected. If you remove the last branch in the
refs/heads/historical hierarchy, you should be able to do such an
update-ref to instanciate refs/heads/historical as a regular ref.
> @@ -3484,12 +3553,24 @@ static int files_fsck_refs_content(struct ref_store *ref_store,
> "trailing garbage in ref");
> goto cleanup;
> }
> + } else {
> + strbuf_addf(&referent_path, "%s/%s",
> + ref_store->gitdir, referent.buf);
> + /*
> + * the referent may contain the spaces and the newline, need to
> + * trim for path.
> + */
> + strbuf_rtrim(&referent_path);
I doubt this is a good design. We have referent, and the symbolic
ref checker knows that the true referent refname may be followed by
whitespaces, so instead of inventing referent _path here, it would
be a better design to let the files_fsck_symref_target() to decide
what file to open and check based on referent, no? Give it the
refstore or refstore's gitdir and have the concatenation with the
rtrimmed contents in the referent->buf after it inspected it
instead, perhaps?
> + ret = files_fsck_symref_target(o, &report,
> + &referent,
> + &referent_path);
next prev parent reply other threads:[~2024-09-18 20:19 UTC|newest]
Thread overview: 209+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-13 14:18 [RFC] Implement ref content consistency check shejialuo
2024-08-15 10:19 ` karthik nayak
2024-08-15 13:37 ` shejialuo
2024-08-16 9:06 ` Patrick Steinhardt
2024-08-16 16:39 ` Junio C Hamano
2024-08-18 15:00 ` [PATCH v1 0/4] add ref content check for files backend shejialuo
2024-08-18 15:01 ` [PATCH v1 1/4] fsck: introduce "FSCK_REF_REPORT_DEFAULT" macro shejialuo
2024-08-20 16:25 ` Junio C Hamano
2024-08-21 12:49 ` shejialuo
2024-08-18 15:01 ` [PATCH v1 2/4] ref: add regular ref content check for files backend shejialuo
2024-08-20 16:49 ` Junio C Hamano
2024-08-21 14:21 ` shejialuo
2024-08-22 8:46 ` Patrick Steinhardt
2024-08-22 16:13 ` Junio C Hamano
2024-08-22 16:17 ` Junio C Hamano
2024-08-23 7:21 ` Patrick Steinhardt
2024-08-23 11:30 ` shejialuo
2024-08-22 8:48 ` Patrick Steinhardt
2024-08-22 12:06 ` shejialuo
2024-08-18 15:01 ` [PATCH v1 3/4] ref: add symbolic " shejialuo
2024-08-22 8:53 ` Patrick Steinhardt
2024-08-22 12:42 ` shejialuo
2024-08-23 5:36 ` Patrick Steinhardt
2024-08-23 11:37 ` shejialuo
2024-08-18 15:02 ` [PATCH v1 4/4] ref: add symlink ref consistency " shejialuo
2024-08-27 16:04 ` [PATCH v2 0/4] add ref content " shejialuo
2024-08-27 16:07 ` [PATCH v2 1/4] ref: initialize "fsck_ref_report" with zero shejialuo
2024-08-27 17:49 ` Junio C Hamano
2024-08-27 16:07 ` [PATCH v2 2/4] ref: add regular ref content check for files backend shejialuo
2024-08-27 16:19 ` shejialuo
2024-08-27 18:21 ` Junio C Hamano
2024-08-28 12:50 ` Patrick Steinhardt
2024-08-28 16:32 ` Junio C Hamano
2024-08-29 10:19 ` Patrick Steinhardt
2024-08-28 14:31 ` shejialuo
2024-08-28 16:45 ` Junio C Hamano
2024-08-28 12:50 ` Patrick Steinhardt
2024-08-28 14:41 ` shejialuo
2024-08-28 15:30 ` Junio C Hamano
2024-08-27 16:08 ` [PATCH v2 3/4] ref: add symbolic " shejialuo
2024-08-27 19:19 ` Junio C Hamano
2024-08-28 15:26 ` shejialuo
2024-08-28 12:50 ` Patrick Steinhardt
2024-08-28 15:36 ` shejialuo
2024-08-28 15:41 ` Junio C Hamano
2024-08-29 10:11 ` Patrick Steinhardt
2024-08-27 16:08 ` [PATCH v2 4/4] ref: add symlink ref " shejialuo
2024-08-28 18:42 ` [PATCH] SQUASH??? remove unused parameters Junio C Hamano
2024-08-28 21:28 ` [PATCH v2 0/4] add ref content check for files backend Junio C Hamano
2024-08-29 4:02 ` Jeff King
2024-08-29 4:59 ` Junio C Hamano
2024-08-29 7:00 ` Patrick Steinhardt
2024-08-29 15:07 ` Junio C Hamano
2024-08-29 19:48 ` Jeff King
2024-08-29 15:48 ` shejialuo
2024-08-29 16:12 ` Junio C Hamano
2024-08-29 15:00 ` [PATCH 8/6] CodingGuidelines: also mention MAYBE_UNUSED Junio C Hamano
2024-08-29 17:52 ` Jeff King
2024-08-29 18:06 ` Junio C Hamano
2024-08-29 18:18 ` [PATCH v2] " Junio C Hamano
2024-08-29 18:27 ` [PATCH 9/6] git-compat-util: guard definition of MAYBE_UNUSED with __GNUC__ Junio C Hamano
2024-08-29 19:45 ` Jeff King
2024-08-29 20:19 ` Junio C Hamano
2024-08-29 19:40 ` [PATCH v2] CodingGuidelines: also mention MAYBE_UNUSED Jeff King
2024-09-03 12:18 ` [PATCH v3 0/4] add ref content check for files backend shejialuo
2024-09-03 12:20 ` [PATCH v3 1/4] ref: initialize "fsck_ref_report" with zero shejialuo
2024-09-03 12:20 ` [PATCH v3 2/4] ref: add regular ref content check for files backend shejialuo
2024-09-09 15:04 ` Patrick Steinhardt
2024-09-10 7:42 ` shejialuo
2024-09-10 16:07 ` karthik nayak
2024-09-13 10:25 ` shejialuo
2024-09-03 12:20 ` [PATCH v3 3/4] ref: add symref " shejialuo
2024-09-09 15:04 ` Patrick Steinhardt
2024-09-10 8:02 ` shejialuo
2024-09-10 22:19 ` karthik nayak
2024-09-12 4:00 ` shejialuo
2024-09-03 12:21 ` [PATCH v3 4/4] ref: add symlink ref " shejialuo
2024-09-09 15:04 ` Patrick Steinhardt
2024-09-10 8:28 ` shejialuo
2024-09-13 17:14 ` [PATCH v4 0/5] add " shejialuo
2024-09-13 17:17 ` [PATCH v4 1/5] ref: initialize "fsck_ref_report" with zero shejialuo
2024-09-18 16:41 ` Junio C Hamano
2024-09-13 17:17 ` [PATCH v4 2/5] ref: port git-fsck(1) regular refs check for files backend shejialuo
2024-09-18 18:59 ` Junio C Hamano
2024-09-22 14:58 ` shejialuo
2024-09-13 17:17 ` [PATCH v4 3/5] ref: add more strict checks for regular refs shejialuo
2024-09-18 19:39 ` Junio C Hamano
2024-09-22 15:06 ` shejialuo
2024-09-22 16:48 ` Junio C Hamano
2024-09-13 17:18 ` [PATCH v4 4/5] ref: add symref content check for files backend shejialuo
2024-09-18 20:19 ` Junio C Hamano [this message]
2024-09-22 15:53 ` shejialuo
2024-09-22 16:55 ` Junio C Hamano
2024-09-13 17:18 ` [PATCH v4 5/5] ref: add symlink ref " shejialuo
2024-09-18 23:02 ` Junio C Hamano
2024-09-18 16:49 ` [PATCH v4 0/5] add " Junio C Hamano
2024-09-29 7:13 ` [PATCH v5 0/9] " shejialuo
2024-09-29 7:15 ` [PATCH v5 1/9] ref: initialize "fsck_ref_report" with zero shejialuo
2024-10-08 7:29 ` Karthik Nayak
2024-09-29 7:15 ` [PATCH v5 2/9] builtin/refs: support multiple worktrees check for refs shejialuo
2024-10-07 6:58 ` Patrick Steinhardt
2024-10-07 8:42 ` shejialuo
2024-10-07 9:16 ` Patrick Steinhardt
2024-10-07 12:06 ` shejialuo
2024-09-29 7:15 ` [PATCH v5 3/9] ref: port git-fsck(1) regular refs check for files backend shejialuo
2024-10-07 6:58 ` Patrick Steinhardt
2024-10-07 8:42 ` shejialuo
2024-10-07 9:18 ` Patrick Steinhardt
2024-10-07 12:08 ` shejialuo
2024-10-08 7:43 ` Karthik Nayak
2024-10-08 12:24 ` shejialuo
2024-10-08 17:44 ` Junio C Hamano
2024-10-09 8:05 ` Patrick Steinhardt
2024-10-09 11:59 ` shejialuo
2024-10-10 6:52 ` Patrick Steinhardt
2024-10-10 16:00 ` Junio C Hamano
2024-10-09 11:55 ` shejialuo
2024-09-29 7:16 ` [PATCH v5 4/9] ref: add more strict checks for regular refs shejialuo
2024-10-07 6:58 ` Patrick Steinhardt
2024-10-07 8:44 ` shejialuo
2024-10-07 9:25 ` Patrick Steinhardt
2024-10-07 12:19 ` shejialuo
2024-09-29 7:16 ` [PATCH v5 5/9] ref: add basic symref content check for files backend shejialuo
2024-10-08 7:58 ` Karthik Nayak
2024-10-08 12:18 ` shejialuo
2024-09-29 7:16 ` [PATCH v5 6/9] ref: add escape check for the referent of symref shejialuo
2024-10-07 6:58 ` Patrick Steinhardt
2024-10-07 8:44 ` shejialuo
2024-10-07 9:26 ` Patrick Steinhardt
2024-09-29 7:17 ` [PATCH v5 7/9] ref: enhance escape situation for worktrees shejialuo
2024-10-07 6:58 ` Patrick Steinhardt
2024-10-07 8:45 ` shejialuo
2024-09-29 7:17 ` [PATCH v5 8/9] t0602: add ref content checks " shejialuo
2024-10-07 6:58 ` Patrick Steinhardt
2024-10-07 8:45 ` shejialuo
2024-09-29 7:17 ` [PATCH v5 9/9] ref: add symlink ref content check for files backend shejialuo
2024-10-07 6:58 ` Patrick Steinhardt
2024-10-07 8:45 ` shejialuo
2024-09-30 18:57 ` [PATCH v5 0/9] add " Junio C Hamano
2024-10-01 3:40 ` shejialuo
2024-10-07 12:49 ` shejialuo
2024-10-21 13:32 ` [PATCH v6 " shejialuo
2024-10-21 13:34 ` [PATCH v6 1/9] ref: initialize "fsck_ref_report" with zero shejialuo
2024-10-21 13:34 ` [PATCH v6 2/9] ref: check the full refname instead of basename shejialuo
2024-10-21 15:38 ` karthik nayak
2024-10-22 11:42 ` shejialuo
2024-11-05 7:11 ` Patrick Steinhardt
2024-11-06 12:37 ` shejialuo
2024-10-21 13:34 ` [PATCH v6 3/9] ref: initialize target name outside of check functions shejialuo
2024-10-21 15:49 ` karthik nayak
2024-11-05 7:11 ` Patrick Steinhardt
2024-11-06 12:32 ` shejialuo
2024-11-06 13:14 ` Patrick Steinhardt
2024-10-21 13:34 ` [PATCH v6 4/9] ref: support multiple worktrees check for refs shejialuo
2024-10-21 15:56 ` karthik nayak
2024-10-22 11:44 ` shejialuo
2024-11-05 7:11 ` Patrick Steinhardt
2024-11-05 12:52 ` shejialuo
2024-11-06 6:34 ` Patrick Steinhardt
2024-11-06 12:20 ` shejialuo
2024-10-21 13:34 ` [PATCH v6 5/9] ref: port git-fsck(1) regular refs check for files backend shejialuo
2024-11-05 7:11 ` Patrick Steinhardt
2024-10-21 13:34 ` [PATCH v6 6/9] ref: add more strict checks for regular refs shejialuo
2024-10-21 13:35 ` [PATCH v6 7/9] ref: add basic symref content check for files backend shejialuo
2024-10-21 13:35 ` [PATCH v6 8/9] ref: check whether the target of the symref is a ref shejialuo
2024-10-21 13:35 ` [PATCH v6 9/9] ref: add symlink ref content check for files backend shejialuo
2024-10-21 16:09 ` [PATCH v6 0/9] add " Taylor Blau
2024-10-22 11:41 ` shejialuo
2024-10-21 16:18 ` Taylor Blau
2024-11-10 12:07 ` [PATCH v7 " shejialuo
2024-11-10 12:09 ` [PATCH v7 1/9] ref: initialize "fsck_ref_report" with zero shejialuo
2024-11-10 12:09 ` [PATCH v7 2/9] ref: check the full refname instead of basename shejialuo
2024-11-10 12:09 ` [PATCH v7 3/9] ref: initialize ref name outside of check functions shejialuo
2024-11-10 12:09 ` [PATCH v7 4/9] ref: support multiple worktrees check for refs shejialuo
2024-11-10 12:09 ` [PATCH v7 5/9] ref: port git-fsck(1) regular refs check for files backend shejialuo
2024-11-13 7:36 ` Patrick Steinhardt
2024-11-14 12:09 ` shejialuo
2024-11-10 12:10 ` [PATCH v7 6/9] ref: add more strict checks for regular refs shejialuo
2024-11-10 12:10 ` [PATCH v7 7/9] ref: add basic symref content check for files backend shejialuo
2024-11-10 12:10 ` [PATCH v7 8/9] ref: check whether the target of the symref is a ref shejialuo
2024-11-10 12:10 ` [PATCH v7 9/9] ref: add symlink ref content check for files backend shejialuo
2024-11-13 7:36 ` Patrick Steinhardt
2024-11-14 12:18 ` shejialuo
2024-11-13 7:36 ` [PATCH v7 0/9] add " Patrick Steinhardt
2024-11-14 16:51 ` [PATCH v8 " shejialuo
2024-11-14 16:53 ` [PATCH v8 1/9] ref: initialize "fsck_ref_report" with zero shejialuo
2024-11-14 16:54 ` [PATCH v8 2/9] ref: check the full refname instead of basename shejialuo
2024-11-14 16:54 ` [PATCH v8 3/9] ref: initialize ref name outside of check functions shejialuo
2024-11-14 16:54 ` [PATCH v8 4/9] ref: support multiple worktrees check for refs shejialuo
2024-11-14 16:54 ` [PATCH v8 5/9] ref: port git-fsck(1) regular refs check for files backend shejialuo
2024-11-15 7:11 ` Patrick Steinhardt
2024-11-15 11:08 ` shejialuo
2024-11-14 16:54 ` [PATCH v8 6/9] ref: add more strict checks for regular refs shejialuo
2024-11-14 16:54 ` [PATCH v8 7/9] ref: add basic symref content check for files backend shejialuo
2024-11-14 16:54 ` [PATCH v8 8/9] ref: check whether the target of the symref is a ref shejialuo
2024-11-14 16:55 ` [PATCH v8 9/9] ref: add symlink ref content check for files backend shejialuo
2024-11-15 11:10 ` [PATCH v8 0/9] add " shejialuo
2024-11-20 11:47 ` [PATCH v9 " shejialuo
2024-11-20 11:51 ` [PATCH v9 1/9] ref: initialize "fsck_ref_report" with zero shejialuo
2024-11-20 11:51 ` [PATCH v9 2/9] ref: check the full refname instead of basename shejialuo
2024-11-20 11:51 ` [PATCH v9 3/9] ref: initialize ref name outside of check functions shejialuo
2024-11-20 11:51 ` [PATCH v9 4/9] ref: support multiple worktrees check for refs shejialuo
2024-11-20 11:51 ` [PATCH v9 5/9] ref: port git-fsck(1) regular refs check for files backend shejialuo
2024-11-20 11:51 ` [PATCH v9 6/9] ref: add more strict checks for regular refs shejialuo
2024-11-20 11:52 ` [PATCH v9 7/9] ref: add basic symref content check for files backend shejialuo
2024-11-20 11:52 ` [PATCH v9 8/9] ref: check whether the target of the symref is a ref shejialuo
2024-11-20 11:52 ` [PATCH v9 9/9] ref: add symlink ref content check for files backend shejialuo
2024-11-20 14:26 ` [PATCH v9 0/9] add " Patrick Steinhardt
2024-11-20 23:21 ` 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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqldzobtq6.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=karthik.188@gmail.com \
--cc=ps@pks.im \
--cc=shejialuo@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.
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 NNTP newsgroup(s).