2012/2/28 Junio C Hamano <gitster@xxxxxxxxx>: >> + 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 -- 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