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
parent
a962da1ef5
commit
94c09a7197
15
object.c
15
object.c
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
3
object.h
3
object.h
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue