This is mostly to avoid overhead on v2 only systems. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- packv4-parse.c | 5 ++++- sha1_file.c | 5 +++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packv4-parse.c b/packv4-parse.c index 7d257af..4354ee3 100644 --- a/packv4-parse.c +++ b/packv4-parse.c @@ -12,6 +12,8 @@ #include "packv4-parse.h" #include "varint.h" +int packv4_available; + const unsigned char *get_sha1ref(struct packed_git *p, const unsigned char **bufp) { @@ -749,7 +751,8 @@ int pv4_tree_desc_from_sha1(struct pv4_tree_desc *desc, strbuf_init(&desc->buf, 0); memset(&oi, 0, sizeof(oi)); - if (!sha1_object_info_extended(sha1, &oi) && + if (packv4_available && + !sha1_object_info_extended(sha1, &oi) && oi.whence == OI_PACKED && oi.u.packed.real_type == OBJ_PV4_TREE && oi.u.packed.pack->version >= 4) { diff --git a/sha1_file.c b/sha1_file.c index 5848008..4744132 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -40,6 +40,7 @@ const unsigned char null_sha1[20]; static const char *no_log_pack_access = "no_log_pack_access"; static const char *log_pack_access; +extern int packv4_available; /* * This is meant to hold a *small* number of objects that you would @@ -763,6 +764,8 @@ void free_pack_by_name(const char *pack_name) close(p->pack_fd); pack_open_fds--; } + if (p->version >= 4) + packv4_available--; close_pack_index(p); free(p->bad_object_sha1); pv4_free_dict(p->ident_dict); @@ -856,6 +859,8 @@ static int open_packed_git_1(struct packed_git *p) " supported (try upgrading GIT to a newer version)", p->pack_name, ntohl(hdr.hdr_version)); p->version = ntohl(hdr.hdr_version); + if (p->version >= 4) + packv4_available++; /* Verify the pack matches its index. */ if (p->num_objects != ntohl(hdr.hdr_entries)) -- 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