From: Nguyen Thai Ngoc Duy Date: Tue, 28 Feb 2012 01:08:42 GMT Subject: Re: [PATCH 03/11] cat-file: use streaming interface to print blobs Message-ID: In-Reply-To: <7vzkc49nnu.fsf@alter.siamese.dyndns.org> 2012/2/28 Junio C Hamano : >> +             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