From: Nguyễn Thái Ngọc Duy Date: Wed, 1 Feb 2012 13:48:54 +0000 (+0700) Subject: sha1_file.c: move the core logic of find_pack_entry() into fill_pack_entry() X-Git-Tag: v1.7.9.2~14^2~1 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=95099731bf2c79ccf5870655e36caa4215f0ced0;p=git.git sha1_file.c: move the core logic of find_pack_entry() into fill_pack_entry() The new helper function implements the logic to find the offset for the object in one pack and fill a pack_entry structure. The next patch will restructure the loop and will call the helper from two places. Signed-off-by: Nguyễn Thái Ngọc Duy Acked-by: Nicolas Pitre Signed-off-by: Junio C Hamano --- diff --git a/sha1_file.c b/sha1_file.c index 88f2151ff..61e51edc4 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -2010,11 +2010,44 @@ int is_pack_valid(struct packed_git *p) return !open_packed_git(p); } +static int fill_pack_entry(const unsigned char *sha1, + struct pack_entry *e, + struct packed_git *p) +{ + off_t offset; + + if (p->num_bad_objects) { + unsigned i; + for (i = 0; i < p->num_bad_objects; i++) + if (!hashcmp(sha1, p->bad_object_sha1 + 20 * i)) + return 0; + } + + offset = find_pack_entry_one(sha1, p); + if (!offset) + return 0; + + /* + * We are about to tell the caller where they can locate the + * requested object. We better make sure the packfile is + * still here and can be accessed before supplying that + * answer, as it may have been deleted since the index was + * loaded! + */ + if (!is_pack_valid(p)) { + warning("packfile %s cannot be accessed", p->pack_name); + return 0; + } + e->offset = offset; + e->p = p; + hashcpy(e->sha1, sha1); + return 1; +} + static int find_pack_entry(const unsigned char *sha1, struct pack_entry *e) { static struct packed_git *last_found = (void *)1; struct packed_git *p; - off_t offset; prepare_packed_git(); if (!packed_git) @@ -2022,35 +2055,11 @@ static int find_pack_entry(const unsigned char *sha1, struct pack_entry *e) p = (last_found == (void *)1) ? packed_git : last_found; do { - if (p->num_bad_objects) { - unsigned i; - for (i = 0; i < p->num_bad_objects; i++) - if (!hashcmp(sha1, p->bad_object_sha1 + 20 * i)) - goto next; - } - - offset = find_pack_entry_one(sha1, p); - if (offset) { - /* - * We are about to tell the caller where they can - * locate the requested object. We better make - * sure the packfile is still here and can be - * accessed before supplying that answer, as - * it may have been deleted since the index - * was loaded! - */ - if (!is_pack_valid(p)) { - warning("packfile %s cannot be accessed", p->pack_name); - goto next; - } - e->offset = offset; - e->p = p; - hashcpy(e->sha1, sha1); + if (fill_pack_entry(sha1, e, p)) { last_found = p; return 1; } - next: if (p == last_found) p = packed_git; else