git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] index-pack: correctly initialize appended objects

From
Junio C Hamano <gitster@pobox.com>
Date
Jul 25, 2008, 18:15 UTC
Message-ID
<7v4p6du8x8.fsf@gitster.siamese.dyndns.org>
In-Reply-To
<alpine.LFD.1.10.0807250751220.9968@xanadu.home>
Nicolas Pitre <nico@cam.org> writes:
Show 25 quoted lines
> On Fri, 25 Jul 2008, Johannes Schindelin wrote:
>
>> Hi,
>> 
>> On Thu, 24 Jul 2008, Junio C Hamano wrote:
>> 
>> > 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?
>> 
>> >From staring at the code, I thought that real_type was set in 
>> resolve_delta(), but I may be wrong.
>> 
>> The safer thing would be to set it, but I am not quite sure if we can use 
>> "type" directly, or if type can be "delta" for an object that is used to 
>> complete the pack, and therefore stored as a non-delta.
>
> Objects to complete the pack are always non delta, so the type and 
> real_type should be the same.  However that shouldn't matter since at 
> that point the object array is not walked anymore, at least not for 
> appended objects, and therefore initializing the type at that point is 
> redundant.
Thanks.  Here is what I committed.
commit 72de2883bd7d4ceda05f107826c7607c594de965
Author: Björn Steinbrink <B.Steinbrink@gmx.de>
Date:   Thu Jul 24 18:32:00 2008 +0100
    index-pack.c: correctly initialize appended objects
    
    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, and will be read back again by get_data_from_pack().  For this
    to work, the fields in object_entry structure need to be initialized
    properly.
    
    Noticed by Pierre Habouzit.
    
    Signed-off-by: Björn Steinbrink <B.Steinbrink@gmx.de>
    Acked-by: Nicolas Pitre <nico@cam.org>
    Acked-by: Shawn O. Pearce <spearce@spearce.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff --git a/index-pack.c b/index-pack.c
index c359f8c..7d5344a 100644
--- a/index-pack.c
+++ b/index-pack.c
@@ -698,6 +698,10 @@ 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].size = size;
+	obj[0].hdr_size = n;
+	obj[0].type = type;
+	obj[0].real_type = type;
 	obj[1].idx.offset = obj[0].idx.offset + n;
 	obj[1].idx.offset += write_compressed(output_fd, buf, size, &obj[0].idx.crc32);
 	hashcpy(obj->idx.sha1, sha1);
Previous: Nicolas PitreNext: Björn Steinbrink
Message 8 of 15 in “index-pack: correctly initialize appended objects”
  1. index-pack: correctly initialize appended objectsJohannes Schindelin, Jul 24, 2008
  2. Björn SteinbrinkJul 24, 2008
  3. Junio C HamanoJul 25, 2008
  4. Johannes SchindelinJul 25, 2008
  5. Nicolas PitreJul 25, 2008
  6. Björn SteinbrinkJul 25, 2008
  7. Nicolas PitreJul 25, 2008
  8. Junio C HamanoJul 25, 2008
  9. Björn SteinbrinkJul 25, 2008
  10. Johannes SchindelinJul 25, 2008
  11. Shawn O. PearceJul 25, 2008
  12. index-pack: correctly initialize appended objectsBjörn Steinbrink, Jul 25, 2008
  13. Shawn O. PearceJul 25, 2008
  14. Johannes SchindelinJul 26, 2008
  15. Nicolas PitreJul 25, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.