On Sun, May 30, 2021 at 02:53:24PM +0800, ZheNing Hu wrote: > When I tried to make cat-file --batch use ref-filter logic, > I encountered this problem: > > get_oid_with_context() does not really let me know > if an oid is in the git repository. E.g. > > get_oid_with_context(the_repository, > "0000000000000000000000000000000000000000",...) > > will return FOUND. (I really want it to tell me MISSING_OBJECT > or something else) Right, it's purely a name->oid lookup. > On the other hand, oid_object_info_extended() will parse an object > in depth, using it will seriously affect performance. So I want to know > if there is a function that can quickly find the oid? I searched in > `object-name.c`, `object-file.c`, and there seems to be no clue... You should be able to use oid_object_info_extended() here. It will try to do as little work as possible to fulfill the items requested in the object_info struct. So a blank one (or even passing NULL) will return an error if the object doesn't exist, but not otherwise. There's also has_object_file(), which is essentially a wrapper for this. -Peff