Re: [PATCH 03/11] cat-file: use streaming interface to print blobs
- From
Nguyen Thai Ngoc Duy <pclouds@gmail.com>
- Date
- Feb 28, 2012, 01:08 UTC
- Message-ID
- <CACsJy8Aa_KRTYVMy8SgB91D3g_=DwP_noxWAO7NWYuQupKPcyA@mail.gmail.com>
- In-Reply-To
- <7vzkc49nnu.fsf@alter.siamese.dyndns.org>
2012/2/28 Junio C Hamano <gitster@pobox.com>:
Show 26 quoted lines
>> + enum object_type type;
>> + unsigned long size;
>> + char *buffer = read_sha1_file(sha1, &type, &size);
>> + if (memcmp(buffer, "object ", 7) ||
>> + get_sha1_hex(buffer + 7, new_sha1))
>> + die("%s not a valid tag", sha1_to_hex(sha1));
>> + sha1 = new_sha1;
>> + free(buffer);
>> + }
>> +
>> + return streaming_write_sha1(1, 0, sha1, OBJ_BLOB, NULL);
>
> I do not think your previous refactoring added a fall-back codepath to the
> function you are calling here. In the original context, the caller of
> streaming_write_entry() made sure that the blob is suitable for streaming
> write by getting an istream, and called the function only when that is the
> case. Blobs unsuitable for streaming (e.g. an deltified object in a pack)
> were handled by the caller that decided not to call
> streaming_write_entry() with the conventional "read to core and then write
> it out" codepath.
>
> And I do not think your updated caller in cat_one_file() is equipped to do
> so at all.
>
> So it looks to me that this patch totally breaks the cat-file. What am I
> missing?I think open_istream can deal with unsuitable for streaming objects too. There's a fallback "incore" backend that does read_sha1_file_extended.
-- Duy