This is a minor change over pack index v2. Since pack v4 already contains the sorted SHA1 table, it is therefore ommitted from the index file. Signed-off-by: Nicolas Pitre <nico@xxxxxxxxxxx> --- pack-write.c | 6 +++++- packv4-create.c | 10 +++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/pack-write.c b/pack-write.c index ca9e63b..631007e 100644 --- a/pack-write.c +++ b/pack-write.c @@ -87,6 +87,8 @@ const char *write_idx_file(const char *index_name, struct pack_idx_entry **objec /* if last object's offset is >= 2^31 we should use index V2 */ index_version = need_large_offset(last_obj_offset, opts) ? 2 : opts->version; + if (index_version < opts->version) + index_version = opts->version; /* index versions 2 and above need a header */ if (index_version >= 2) { @@ -127,7 +129,9 @@ const char *write_idx_file(const char *index_name, struct pack_idx_entry **objec uint32_t offset = htonl(obj->offset); sha1write(f, &offset, 4); } - sha1write(f, obj->sha1, 20); + /* Pack v4 (using index v3) carries the SHA1 table already */ + if (index_version < 3) + sha1write(f, obj->sha1, 20); git_SHA1_Update(&ctx, obj->sha1, 20); if ((opts->flags & WRITE_IDX_STRICT) && (i && !hashcmp(list[-2]->sha1, obj->sha1))) diff --git a/packv4-create.c b/packv4-create.c index a9e9002..22cdf8e 100644 --- a/packv4-create.c +++ b/packv4-create.c @@ -1014,8 +1014,10 @@ static void process_one_pack(char *src_pack, char *dst_pack) struct packed_git *p; struct sha1file *f; struct pack_idx_entry *objs, **p_objs; + struct pack_idx_option idx_opts; unsigned i, nr_objects; off_t written = 0; + unsigned char pack_sha1[20]; p = open_pack(src_pack); if (!p) @@ -1041,11 +1043,17 @@ static void process_one_pack(char *src_pack, char *dst_pack) for (i = 0; i < nr_objects; i++) { off_t obj_pos = written; struct pack_idx_entry *obj = p_objs[i]; + crc32_begin(f); written += packv4_write_object(f, p, obj); obj->offset = obj_pos; + obj->crc32 = crc32_end(f); } - sha1close(f, NULL, CSUM_CLOSE | CSUM_FSYNC); + sha1close(f, pack_sha1, CSUM_CLOSE | CSUM_FSYNC); + + reset_pack_idx_option(&idx_opts); + idx_opts.version = 3; + write_idx_file(dst_pack, p_objs, nr_objects, &idx_opts, pack_sha1); } static int git_pack_config(const char *k, const char *v, void *cb) -- 1.8.4.38.g317e65b -- 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