Signed-off-by: Nguyễn Thái Ngọc Duy <[email protected]>
---
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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html