diff options
Diffstat (limited to 'sha1_file.c')
-rw-r--r-- | sha1_file.c | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/sha1_file.c b/sha1_file.c index 09456d23f8..1c4df5b73e 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -1013,7 +1013,7 @@ void packed_object_info_detail(struct packed_git *p, for (;;) { switch (kind) { default: - die("corrupted pack file %s containing object of kind %d", + die("pack %s contains unknown object type %d", p->pack_name, kind); case OBJ_COMMIT: case OBJ_TREE: @@ -1063,7 +1063,7 @@ static int packed_object_info(struct packed_git *p, unsigned long offset, strcpy(type, type_names[kind]); break; default: - die("corrupted pack file %s containing object of kind %d", + die("pack %s contains unknown object type %d", p->pack_name, kind); } if (sizep) @@ -1261,7 +1261,7 @@ struct packed_git *find_sha1_pack(const unsigned char *sha1, } -int sha1_object_info(const unsigned char *sha1, char *type, unsigned long *sizep) +static int sha1_loose_object_info(const unsigned char *sha1, char *type, unsigned long *sizep) { int status; unsigned long mapsize, size; @@ -1270,20 +1270,8 @@ int sha1_object_info(const unsigned char *sha1, char *type, unsigned long *sizep char hdr[128]; map = map_sha1_file(sha1, &mapsize); - if (!map) { - struct pack_entry e; - - if (!find_pack_entry(sha1, &e, NULL)) { - reprepare_packed_git(); - if (!find_pack_entry(sha1, &e, NULL)) - return error("unable to find %s", sha1_to_hex(sha1)); - } - if (use_packed_git(e.p)) - die("cannot map packed file"); - status = packed_object_info(e.p, e.offset, type, sizep); - unuse_packed_git(e.p); - return status; - } + if (!map) + return error("unable to find %s", sha1_to_hex(sha1)); if (unpack_sha1_header(&stream, map, mapsize, hdr, sizeof(hdr)) < 0) status = error("unable to unpack %s header", sha1_to_hex(sha1)); @@ -1299,6 +1287,23 @@ int sha1_object_info(const unsigned char *sha1, char *type, unsigned long *sizep return status; } +int sha1_object_info(const unsigned char *sha1, char *type, unsigned long *sizep) +{ + int status; + struct pack_entry e; + + if (!find_pack_entry(sha1, &e, NULL)) { + reprepare_packed_git(); + if (!find_pack_entry(sha1, &e, NULL)) + return sha1_loose_object_info(sha1, type, sizep); + } + if (use_packed_git(e.p)) + die("cannot map packed file"); + status = packed_object_info(e.p, e.offset, type, sizep); + unuse_packed_git(e.p); + return status; +} + static void *read_packed_sha1(const unsigned char *sha1, char *type, unsigned long *size) { struct pack_entry e; |