object.c: allow parse_object to handle arbitrary repositories
Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
108ed1a3d8
commit
8e4b0b6047
14
object.c
14
object.c
@ -245,28 +245,28 @@ struct object *parse_object_or_die(const struct object_id *oid,
|
|||||||
die(_("unable to parse object: %s"), name ? name : oid_to_hex(oid));
|
die(_("unable to parse object: %s"), name ? name : oid_to_hex(oid));
|
||||||
}
|
}
|
||||||
|
|
||||||
struct object *parse_object_the_repository(const struct object_id *oid)
|
struct object *parse_object(struct repository *r, const struct object_id *oid)
|
||||||
{
|
{
|
||||||
unsigned long size;
|
unsigned long size;
|
||||||
enum object_type type;
|
enum object_type type;
|
||||||
int eaten;
|
int eaten;
|
||||||
const struct object_id *repl = lookup_replace_object(the_repository, oid);
|
const struct object_id *repl = lookup_replace_object(r, oid);
|
||||||
void *buffer;
|
void *buffer;
|
||||||
struct object *obj;
|
struct object *obj;
|
||||||
|
|
||||||
obj = lookup_object(the_repository, oid->hash);
|
obj = lookup_object(r, oid->hash);
|
||||||
if (obj && obj->parsed)
|
if (obj && obj->parsed)
|
||||||
return obj;
|
return obj;
|
||||||
|
|
||||||
if ((obj && obj->type == OBJ_BLOB && has_object_file(oid)) ||
|
if ((obj && obj->type == OBJ_BLOB && has_object_file(oid)) ||
|
||||||
(!obj && has_object_file(oid) &&
|
(!obj && has_object_file(oid) &&
|
||||||
oid_object_info(the_repository, oid, NULL) == OBJ_BLOB)) {
|
oid_object_info(r, oid, NULL) == OBJ_BLOB)) {
|
||||||
if (check_object_signature(repl, NULL, 0, NULL) < 0) {
|
if (check_object_signature(repl, NULL, 0, NULL) < 0) {
|
||||||
error("sha1 mismatch %s", oid_to_hex(oid));
|
error("sha1 mismatch %s", oid_to_hex(oid));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
parse_blob_buffer(lookup_blob(the_repository, oid), NULL, 0);
|
parse_blob_buffer(lookup_blob(r, oid), NULL, 0);
|
||||||
return lookup_object(the_repository, oid->hash);
|
return lookup_object(r, oid->hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer = read_object_file(oid, &type, &size);
|
buffer = read_object_file(oid, &type, &size);
|
||||||
@ -277,7 +277,7 @@ struct object *parse_object_the_repository(const struct object_id *oid)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
obj = parse_object_buffer(the_repository, oid, type, size,
|
obj = parse_object_buffer(r, oid, type, size,
|
||||||
buffer, &eaten);
|
buffer, &eaten);
|
||||||
if (!eaten)
|
if (!eaten)
|
||||||
free(buffer);
|
free(buffer);
|
||||||
|
3
object.h
3
object.h
@ -124,8 +124,7 @@ void *object_as_type(struct repository *r, struct object *obj, enum object_type
|
|||||||
*
|
*
|
||||||
* Returns NULL if the object is missing or corrupt.
|
* Returns NULL if the object is missing or corrupt.
|
||||||
*/
|
*/
|
||||||
#define parse_object(r, oid) parse_object_##r(oid)
|
struct object *parse_object(struct repository *r, const struct object_id *oid);
|
||||||
struct object *parse_object_the_repository(const struct object_id *oid);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Like parse_object, but will die() instead of returning NULL. If the
|
* Like parse_object, but will die() instead of returning NULL. If the
|
||||||
|
Loading…
Reference in New Issue
Block a user