grep: add repository to OID grep sources

Record the repository whenever an OID grep source is created, and teach
the worker threads to explicitly provide the repository when accessing
objects.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Reviewed-by: Matheus Tavares <matheus.bernardino@usp.br>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jonathan Tan
2021-08-16 14:09:56 -07:00
committed by Junio C Hamano
parent dd45471a37
commit 0693806bf8
3 changed files with 27 additions and 12 deletions

7
grep.c
View File

@ -1863,7 +1863,8 @@ void grep_source_init_file(struct grep_source *gs, const char *name,
}
void grep_source_init_oid(struct grep_source *gs, const char *name,
const char *path, const struct object_id *oid)
const char *path, const struct object_id *oid,
struct repository *repo)
{
gs->type = GREP_SOURCE_OID;
gs->name = xstrdup_or_null(name);
@ -1872,6 +1873,7 @@ void grep_source_init_oid(struct grep_source *gs, const char *name,
gs->size = 0;
gs->driver = NULL;
gs->identifier = oiddup(oid);
gs->repo = repo;
}
void grep_source_clear(struct grep_source *gs)
@ -1900,7 +1902,8 @@ static int grep_source_load_oid(struct grep_source *gs)
{
enum object_type type;
gs->buf = read_object_file(gs->identifier, &type, &gs->size);
gs->buf = repo_read_object_file(gs->repo, gs->identifier, &type,
&gs->size);
if (!gs->buf)
return error(_("'%s': unable to read %s"),
gs->name,