From: Jeff King <peff@peff.net>
To: Jonathan Tan <jonathantanmy@google.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 04/23] remember commit/tag parse failures
Date: Thu, 24 Oct 2019 19:41:11 -0400 [thread overview]
Message-ID: <20191024234111.GC32602@sigill.intra.peff.net> (raw)
In-Reply-To: <20191024232546.70565-1-jonathantanmy@google.com>
On Thu, Oct 24, 2019 at 04:25:46PM -0700, Jonathan Tan wrote:
> Firstly, this patch is not about remembering, but about not setting
> anything, so I think that the title should be something like:
>
> commit, tag: set parsed only if no parsing error
True. I had also played with actually remembering via a bit, which I
think is how I ended up thinking about it that way. You could argue that
it is "not forgetting", which is remembering. :) But I think your
suggested title is better.
> Incidentally, the check that you mentioned in PATCH 02 is probably no
> longer necessary. The tests all pass even with the following diff:
>
> diff --git a/commit.c b/commit.c
> index e12e7998ad..086011d944 100644
> --- a/commit.c
> +++ b/commit.c
> @@ -359,7 +359,7 @@ struct tree *repo_get_commit_tree(struct repository *r,
> struct object_id *get_commit_tree_oid(const struct commit *commit)
> {
> struct tree *tree = get_commit_tree(commit);
> - return tree ? &tree->object.oid : NULL;
> + return &tree->object.oid;
> }
Ah, I see the confusion you had earlier. The check I meant in patch 2
(and here) was the one in write_graph_chunk_data(), which checks for a
non-NULL tree even after we just saw a successful parse.
I agree that getting rid of the check in get_commit_tree_oid() is
unlikely to cause any bugs, but there are still cases where it could
help. Namely if I choose to ignore the parse failure (because I want to
see the parts of the commit struct that we did manage to get), then I'd
like to be able to ask whether we have a valid tree, like:
oid = get_commit_tree_oid(commit);
if (!oid)
do something...
With the revert you showed above, that's dangerous, because we'd get a
bogus value like "8" (because the oid is offset 8 bytes in the struct
which we've dereferenced as NULL).
You could obviously use "get_commit_tree()" instead, which would let you
compare to NULL. But it seemed simpler to leave the extra safety in
place.
-Peff
next prev parent reply other threads:[~2019-10-24 23:41 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-18 4:41 [PATCH 0/23] parsing and fsck cleanups Jeff King
2019-10-18 4:42 ` [PATCH 01/23] parse_commit_buffer(): treat lookup_commit() failure as parse error Jeff King
2019-10-24 3:37 ` Junio C Hamano
2019-10-24 18:01 ` Jeff King
2019-10-18 4:43 ` [PATCH 02/23] parse_commit_buffer(): treat lookup_tree() " Jeff King
2019-10-24 23:12 ` Jonathan Tan
2019-10-24 23:22 ` Jeff King
2019-10-18 4:45 ` [PATCH 03/23] parse_tag_buffer(): treat NULL tag pointer " Jeff King
2019-10-18 4:47 ` [PATCH 04/23] remember commit/tag parse failures Jeff King
2019-10-24 3:51 ` Junio C Hamano
2019-10-24 23:25 ` Jonathan Tan
2019-10-24 23:41 ` Jeff King [this message]
2019-10-18 4:48 ` [PATCH 05/23] fsck: stop checking commit->tree value Jeff King
2019-10-24 3:57 ` Junio C Hamano
2019-10-18 4:49 ` [PATCH 06/23] fsck: stop checking commit->parent counts Jeff King
2019-10-18 4:51 ` [PATCH 07/23] fsck: stop checking tag->tagged Jeff King
2019-10-18 4:54 ` [PATCH 08/23] fsck: require an actual buffer for non-blobs Jeff King
2019-10-18 4:56 ` [PATCH 09/23] fsck: unify object-name code Jeff King
2019-10-24 6:05 ` Junio C Hamano
2019-10-24 18:07 ` Jeff King
2019-10-25 3:23 ` Junio C Hamano
2019-10-25 21:20 ` Jeff King
2019-10-18 4:56 ` [PATCH 10/23] fsck_describe_object(): build on our get_object_name() primitive Jeff King
2019-10-24 6:06 ` Junio C Hamano
2019-10-18 4:57 ` [PATCH 11/23] fsck: use oids rather than objects for object_name API Jeff King
2019-10-18 4:58 ` [PATCH 12/23] fsck: don't require object structs for display functions Jeff King
2019-10-18 4:58 ` [PATCH 13/23] fsck: only provide oid/type in fsck_error callback Jeff King
2019-10-18 4:58 ` [PATCH 14/23] fsck: only require an oid for skiplist functions Jeff King
2019-10-18 4:59 ` [PATCH 15/23] fsck: don't require an object struct for report() Jeff King
2019-10-18 4:59 ` [PATCH 16/23] fsck: accept an oid instead of a "struct blob" for fsck_blob() Jeff King
2019-10-18 4:59 ` [PATCH 17/23] fsck: drop blob struct from fsck_finish() Jeff King
2019-10-18 5:00 ` [PATCH 18/23] fsck: don't require an object struct for fsck_ident() Jeff King
2019-10-18 5:00 ` [PATCH 19/23] fsck: don't require an object struct in verify_headers() Jeff King
2019-10-18 5:00 ` [PATCH 20/23] fsck: rename vague "oid" local variables Jeff King
2019-10-18 5:01 ` [PATCH 21/23] fsck: accept an oid instead of a "struct tag" for fsck_tag() Jeff King
2019-10-18 5:01 ` [PATCH 22/23] fsck: accept an oid instead of a "struct commit" for fsck_commit() Jeff King
2019-10-18 5:02 ` [PATCH 23/23] fsck: accept an oid instead of a "struct tree" for fsck_tree() Jeff King
2019-10-24 23:49 ` [PATCH 0/23] parsing and fsck cleanups Jonathan Tan
2019-10-25 3:11 ` 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=20191024234111.GC32602@sigill.intra.peff.net \
--to=peff@peff.net \
--cc=git@vger.kernel.org \
--cc=jonathantanmy@google.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).