Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- cache.h | 2 +- sha1_file.c | 3 +-- streaming.c | 9 ++++++++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/cache.h b/cache.h index 20c2d6d..5028ded 100644 --- a/cache.h +++ b/cache.h @@ -1168,7 +1168,7 @@ struct object_info { struct { struct packed_git *pack; off_t offset; - unsigned int is_delta; + unsigned int real_type; } packed; } u; }; diff --git a/sha1_file.c b/sha1_file.c index ef6ecc8..5848008 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -2557,8 +2557,7 @@ int sha1_object_info_extended(const unsigned char *sha1, struct object_info *oi) oi->whence = OI_PACKED; oi->u.packed.offset = e.offset; oi->u.packed.pack = e.p; - oi->u.packed.is_delta = (rtype == OBJ_REF_DELTA || - rtype == OBJ_OFS_DELTA); + oi->u.packed.real_type = rtype; } return 0; diff --git a/streaming.c b/streaming.c index c7edebb..2cc4c03 100644 --- a/streaming.c +++ b/streaming.c @@ -104,6 +104,12 @@ ssize_t read_istream(struct git_istream *st, void *buf, size_t sz) return st->vtbl->read(st, buf, sz); } +static int is_canonical(int type) +{ + return type != OBJ_COMMIT && type != OBJ_TREE && + type != OBJ_BLOB && type != OBJ_TAG; +} + static enum input_source istream_source(const unsigned char *sha1, enum object_type *type, struct object_info *oi) @@ -121,7 +127,8 @@ static enum input_source istream_source(const unsigned char *sha1, case OI_LOOSE: return loose; case OI_PACKED: - if (!oi->u.packed.is_delta && big_file_threshold < size) + if (is_canonical(oi->u.packed.real_type) && + big_file_threshold < size) return pack_non_delta; /* fallthru */ default: -- 1.8.2.83.gc99314b -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html