diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2013-09-13 18:03:00 +0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-09-13 11:28:33 -0700 |
commit | 77965f8b29f8311c42a0a770693dd0f8411e84db (patch) | |
tree | 3db16333b84e7f2b3f4231acf65f3b51f68e7511 | |
parent | e230c568c4b9a991e3175e5f65171a566fd8e39c (diff) | |
download | git-nd/unpack-entry-optim-in-pack-objects.tar.gz |
pack-objects: no crc check when the cached version is usednd/unpack-entry-optim-in-pack-objects
Current code makes pack-objects always do check_pack_crc() in
unpack_entry() even if right after that we find out there's a cached
version and pack access is not needed. Swap two code blocks, search
for cached version first, then check crc.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | sha1_file.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/sha1_file.c b/sha1_file.c index 8e27db1bd2..6f5a1e0717 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -2056,6 +2056,16 @@ void *unpack_entry(struct packed_git *p, off_t obj_offset, int i; struct delta_base_cache_entry *ent; + ent = get_delta_base_cache_entry(p, curpos); + if (eq_delta_base_cache_entry(ent, p, curpos)) { + type = ent->type; + data = ent->data; + size = ent->size; + clear_delta_base_cache_entry(ent); + base_from_cache = 1; + break; + } + if (do_check_packed_object_crc && p->index_version > 1) { struct revindex_entry *revidx = find_pack_revindex(p, obj_offset); unsigned long len = revidx[1].offset - obj_offset; @@ -2070,16 +2080,6 @@ void *unpack_entry(struct packed_git *p, off_t obj_offset, } } - ent = get_delta_base_cache_entry(p, curpos); - if (eq_delta_base_cache_entry(ent, p, curpos)) { - type = ent->type; - data = ent->data; - size = ent->size; - clear_delta_base_cache_entry(ent); - base_from_cache = 1; - break; - } - type = unpack_object_header(p, &w_curs, &curpos, &size); if (type != OBJ_OFS_DELTA && type != OBJ_REF_DELTA) break; |