pack-objects: no crc check when the cached version is used

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>

Nguyễn Thái Ngọc Duy committed Sep 13, 2013 at 18:03 UTC 77965f8b29f8311c42a0a770693dd0f8411e84db
1 file changed +10 -10
sha1_file.c
+10 -10
@@ -2056,6 +2056,16 @@ void *unpack_entry(struct packed_git *p, off_t obj_offset,
2056 int i;
2057 struct delta_base_cache_entry *ent;
2058
2059 + ent = get_delta_base_cache_entry(p, curpos);
2060 + if (eq_delta_base_cache_entry(ent, p, curpos)) {
2061 + type = ent->type;
2062 + data = ent->data;
2063 + size = ent->size;
2064 + clear_delta_base_cache_entry(ent);
2065 + base_from_cache = 1;
2066 + break;
2067 + }
2068 +
2069 if (do_check_packed_object_crc && p->index_version > 1) {
2070 struct revindex_entry *revidx = find_pack_revindex(p, obj_offset);
2071 unsigned long len = revidx[1].offset - obj_offset;
@@ -2070,16 +2080,6 @@ void *unpack_entry(struct packed_git *p, off_t obj_offset,
2080 }
2081 }
2082
2073 - ent = get_delta_base_cache_entry(p, curpos);
2074 - if (eq_delta_base_cache_entry(ent, p, curpos)) {
2075 - type = ent->type;
2076 - data = ent->data;
2077 - size = ent->size;
2078 - clear_delta_base_cache_entry(ent);
2079 - base_from_cache = 1;
2080 - break;
2081 - }
2082 -
2083 type = unpack_object_header(p, &w_curs, &curpos, &size);
2084 if (type != OBJ_OFS_DELTA && type != OBJ_REF_DELTA)
2085 break;