On Wed, Sep 07, 2022 at 10:45:39AM -0400, Derrick Stolee wrote: > After writing this, it was bothering me that 'rev-list --verify' should > be checking for corruption throughout the history, not just at the tips. > > This is done via the condition in builtin/rev-list.c:finish_object(): > > static int finish_object(struct object *obj, const char *name, void *cb_data) > { > struct rev_list_info *info = cb_data; > if (oid_object_info_extended(the_repository, &obj->oid, NULL, 0) < 0) { > finish_object__ma(obj); > return 1; > } > if (info->revs->verify_objects && !obj->parsed && obj->type != OBJ_COMMIT) > parse_object(the_repository, &obj->oid); > return 0; > } > > So this call is the one that is used most-often by the rev-list command, > but isn't necessary to update for the purpose of our desired speedup. This > is another place where we would want to use read_object_file(). (It may even > be the _only_ place, since finish_object() should be called even for the > tip objects.) Yeah, I think this is the only place. At least, if you remove the hash check entirely, then this parse_object() is the only spots that causes a problem (via the existing test in t1450). > In case you think it is valuable to ensure we test both cases ("tip" and > "not tip") I modified your test to have a third commit and test two rev-list > calls: I don't think it's important to test here, as we know we just touched the tip code here. But also, that existing "rev-list --verify-objects" test in t1450 is covering that case: it corrupts a blob that is reachable from an otherwise good commit/tree. We should also have tip and non-tip tests for commits, but I posted those in a separate series. ;) -Peff