Re: [PATCH v2] revision: allow missing promisor objects on CLI
From: Jonathan Tan <hidden>
Date: 2020-01-02 20:49:22
quoted
However, in the case that --ignore-missing is not set but --exclude-promisor-objects is set, there is still no distinction between the case wherein the missing object is a promisor object and the case wherein it is not. This is unnecessarily restrictive, since if a missing promisor object is encountered in traversal, it is ignored; likewise it should be ignored if provided through the CLI. Therefore, distinguish between these 2 cases. (As a bonus, the code is now simpler.)nit about tenses, not worth a reroll on its own: "As a bonus, this makes the code simpler" (since commit messages describe the status quo before the patch in the present tense).
OK.
quoted
--- a/revision.c +++ b/revision.c@@ -370,8 +370,18 @@ static struct object *get_reference(struct rev_info *revs, const char *name, if (!repo_parse_commit(revs->repo, c)) object = (struct object *) c; else + /* + * There is something wrong with the commit. + * repo_parse_commit() will have already printed an + * error message. For our purposes, treat as missing. + */ object = NULL; } else { + /* + * There is something wrong with the object. parse_object()If we got here, we are in the !commit case, which is not inherently wrong, right?
[snip] Ah, good catch. It should be "If parse_object() returns NULL, ..."
By the way, why doesn't parse_object itself check the commit graph for commit objects?
Because that's how I coded it in ec0c5798ee ("revision: use commit graph
in get_reference()", 2018-12-28). In the commit message, I said:
Another way to accomplish this effect would be to modify parse_object() to use the commit graph if possible; however, I did not want to change parse_object()'s current behavior of always checking the object signature of the returned object.
But that doesn't mean that we cannot change it.
By "and treats it as missing" does this mean "and we should treat it as missing"? (Forgive my ignorance.)
I don't fully know if we should, hence my specific wording :-P but see my answer to your next question.
Why do we treat corrupt objects as missing? Is this for graceful degredation when trying to recover data from a corrupt repository?
This (at least, treating wrong-hash objects the same as missing) has
been true since acdeec62cb ("Don't ever return corrupt objects from
"parse_object()"", 2007-03-20) (and that commit message has no
explanation). I think this is best - I consider corrupt objects to be
similar to missing objects with respect to repository corruption, so for
me it is logical to treat them the same way.