object: allow lookup_object to handle arbitrary repositories

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Stefan Beller 2018-06-28 18:22:07 -07:00 committed by Junio C Hamano
parent a962da1ef5
commit 94c09a7197
2 changed files with 8 additions and 10 deletions

View File

@ -84,21 +84,20 @@ static void insert_obj_hash(struct object *obj, struct object **hash, unsigned i
* Look up the record for the given sha1 in the hash map stored in * Look up the record for the given sha1 in the hash map stored in
* obj_hash. Return NULL if it was not found. * obj_hash. Return NULL if it was not found.
*/ */
struct object *lookup_object_the_repository(const unsigned char *sha1) struct object *lookup_object(struct repository *r, const unsigned char *sha1)
{ {
unsigned int i, first; unsigned int i, first;
struct object *obj; struct object *obj;


if (!the_repository->parsed_objects->obj_hash) if (!r->parsed_objects->obj_hash)
return NULL; return NULL;


first = i = hash_obj(sha1, first = i = hash_obj(sha1, r->parsed_objects->obj_hash_size);
the_repository->parsed_objects->obj_hash_size); while ((obj = r->parsed_objects->obj_hash[i]) != NULL) {
while ((obj = the_repository->parsed_objects->obj_hash[i]) != NULL) {
if (!hashcmp(sha1, obj->oid.hash)) if (!hashcmp(sha1, obj->oid.hash))
break; break;
i++; i++;
if (i == the_repository->parsed_objects->obj_hash_size) if (i == r->parsed_objects->obj_hash_size)
i = 0; i = 0;
} }
if (obj && i != first) { if (obj && i != first) {
@ -107,8 +106,8 @@ struct object *lookup_object_the_repository(const unsigned char *sha1)
* that we do not need to walk the hash table the next * that we do not need to walk the hash table the next
* time we look for it. * time we look for it.
*/ */
SWAP(the_repository->parsed_objects->obj_hash[i], SWAP(r->parsed_objects->obj_hash[i],
the_repository->parsed_objects->obj_hash[first]); r->parsed_objects->obj_hash[first]);
} }
return obj; return obj;
} }

View File

@ -109,8 +109,7 @@ extern struct object *get_indexed_object(unsigned int);
* half-initialised objects, the caller is expected to initialize them * half-initialised objects, the caller is expected to initialize them
* by calling parse_object() on them. * by calling parse_object() on them.
*/ */
#define lookup_object(r, s) lookup_object_##r(s) struct object *lookup_object(struct repository *r, const unsigned char *sha1);
struct object *lookup_object_the_repository(const unsigned char *sha1);


extern void *create_object(struct repository *r, const unsigned char *sha1, void *obj); extern void *create_object(struct repository *r, const unsigned char *sha1, void *obj);