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 2/5] ref: port git-fsck(1) regular refs check for files backend
Date: Wed, 18 Sep 2024 11:59:45 -0700 [thread overview]
Message-ID: <xmqqh6acdbz2.fsf@gitster.g> (raw)
In-Reply-To: <ZuRzwKTFd65RL4HC@ArchLinux> (shejialuo@gmail.com's message of "Sat, 14 Sep 2024 01:17:52 +0800")
shejialuo <shejialuo@gmail.com> writes:
> We implicitly rely on "git-fsck(1)" to check the consistency of regular
> refs. However, we have already set up the infrastructure of the ref
> consistency checks. We need to port original checks from "git-fsck(1)".
> Thus, we could clean the "git-fsck(1)" code by removing these implicit
> checks.
The above reads as if you are, in preparation to "port" the checks
we have in "fsck" to elsewhere (presumably to "refs verify"), you
are removing the checks that _will_ become redundant from "fsck".
But that does not seem to be what is happening. Let me try to
paraphrase, in order to check my understanding of what you wanted to
say:
"git-fsck(1) has some consistency checks for regular refs. As
we want to align the checks "git refs verify" performs with
them (and eventually call the unified code that checks refs from
both), port the logic "git fsck" has to "git refs verify".
If we fail to achieve the "a single unified code to check called by
both fsck and refs-verify" at the end of this series, and instead
end up with duplicated code that implements the checks in two
separate code, risking them to be slightly different and drift away
over time from each other, that is fine, as long as our intention is
to continue the effort for unification in a follow up series.
But such a plan needs to be spelled out.
> diff --git a/refs/files-backend.c b/refs/files-backend.c
> index 890d0324e1..b1ed2e5c04 100644
> --- a/refs/files-backend.c
> +++ b/refs/files-backend.c
> @@ -3430,6 +3430,48 @@ typedef int (*files_fsck_refs_fn)(struct ref_store *ref_store,
> const char *refs_check_dir,
> struct dir_iterator *iter);
>
> +static int files_fsck_refs_content(struct ref_store *ref_store,
> + struct fsck_options *o,
> + const char *refs_check_dir,
> + struct dir_iterator *iter)
> +{
> + struct strbuf ref_content = STRBUF_INIT;
> + struct strbuf referent = STRBUF_INIT;
> + struct strbuf refname = STRBUF_INIT;
> + struct fsck_ref_report report = {0};
> + unsigned int type = 0;
> + int failure_errno = 0;
> + struct object_id oid;
> + int ret = 0;
> +
> + strbuf_addf(&refname, "%s/%s", refs_check_dir, iter->relative_path);
> + report.path = refname.buf;
> +
> + if (S_ISLNK(iter->st.st_mode))
> + goto cleanup;
"symbolic links are OK" for now. We'll add sanity checks for them
in later steps. OK.
> + if (strbuf_read_file(&ref_content, iter->path.buf, 0) < 0) {
> + ret = error_errno(_("unable to read ref '%s/%s'"),
> + refs_check_dir, iter->relative_path);
Is there a reason why we cannot to use report.path aka refname.buf,
and instead we have to recompute the same path again?
Should this error be propagated back to the caller, not just to the
end-user, by a call to fsck_report_ref(), like you do for a ref file
that has questionable contents? If ref iteration (like for-each-ref)
claims there is this ref, and you cannot read its value when you try
to use it, it is just as bad as having a loose ref file that has
unusable contents, isn't it?
It is a separate matter if such a failure mode deserves its own
error code (FSCK_MSG_UNREADABLE_REF) or can be rolled into the same
FSCK_MSG_BAD_REF_CONTENT. I can see arguments for both sides and
offhand have no strong preference either way.
Thanks.
> + goto cleanup;
> + }
> +
> + if (parse_loose_ref_contents(ref_store->repo->hash_algo,
> + ref_content.buf, &oid, &referent,
> + &type, &failure_errno)) {
> + ret = fsck_report_ref(o, &report,
> + FSCK_MSG_BAD_REF_CONTENT,
> + "invalid ref content");
> + goto cleanup;
> + }
> +
> +cleanup:
> + strbuf_release(&refname);
> + strbuf_release(&ref_content);
> + strbuf_release(&referent);
> + return ret;
> +}
next prev parent reply other threads:[~2024-09-18 18:59 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 [this message]
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
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=xmqqh6acdbz2.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).