Johannes Schindelin [off-list ref] writes:
From: Björn Steinbrink <redacted>
When index-pack completes a thin pack it appends objects to the pack.
Since the commit 92392b4(index-pack: Honor core.deltaBaseCacheLimit when
resolving deltas) such an object can be pruned in case of memory
pressure.
To be able to re-read the object later, a few more fields have to be set.
Noticed by Pierre Habouzit.
Hopefully-signed-off-by: Björn Steinbrink [off-list ref]
Hopefully-reviewed-and-signed-off-by: Nicolas Pitre [off-list ref],
--
Nico could you have a quick look? (I would ask Shawn, but I know
that he is pretty busy with real world issues.)
Reading get_data_from_pack(), it does rely on hdr_size, idx.offset and
idx.offset of the next entry to be set correctly. The function does not
seem to use type (which the patch is also setting) nor real_type (which
the patch does not set).
However, the code checks objects[nth].real_type all over the place in the
code. Doesn't the lack of real_type assignment in append_obj_to_pack()
affect them in any way?
quoted hunk
diff --git a/index-pack.c b/index-pack.c
index ac20a46..33ba8ef 100644
--- a/index-pack.c
+++ b/index-pack.c
@@ -699,6 +699,9 @@ static struct object_entry *append_obj_to_pack(
write_or_die(output_fd, header, n);
obj[0].idx.crc32 = crc32(0, Z_NULL, 0);
obj[0].idx.crc32 = crc32(obj[0].idx.crc32, header, n);
+ obj[0].hdr_size = n;
+ obj[0].type = type;
+ obj[0].size = size;
obj[1].idx.offset = obj[0].idx.offset + n;
obj[1].idx.offset += write_compressed(output_fd, buf, size, &obj[0].idx.crc32);