> Junio C Hamano <gitster@xxxxxxxxx> wrote: > > If the check is only about a thin delta base that is not going to be > > transmit, I'd agree. But I do not see how you are distinguishing that > > case and the case where an object you are actually sending is missing (in > > which case we would want to error out, wouldn't we?) Turns out to be pretty simple I think. We just delay the error handling for ->type < 0 until write_object(). If we get this far we know we wanted to include the object but we really don't have it. Up until that point its fine for us to get objects which are missing, we'll just wind up with a suboptimal pack. We also don't even need to report the error from sha1_object_info as it already issues an error message (see sha1_loose_object_info). --8<-- pack-objects: Allow missing base objects when creating thin packs If we are building a thin pack and one of the base objects we would consider for deltification is missing its OK, the other side already has that base object. We may be able to get a delta from another object, or we can simply send the new object whole (no delta). This allows a shallow clone which may have only commits and trees (but only partial blobs) to generate a pack for a fetch client, so the shallow clone only needs to contain objects that are not in the common base. Signed-off-by: Shawn O. Pearce <spearce@xxxxxxxxxxx> --- builtin-pack-objects.c | 5 ++--- 1 files changed, 2 insertions(+), 3 deletions(-) diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c index 2dadec1..187cb19 100644 --- a/builtin-pack-objects.c +++ b/builtin-pack-objects.c @@ -243,6 +243,8 @@ static unsigned long write_object(struct sha1file *f, crc32_begin(f); type = entry->type; + if (type < 0) + die("unable to read object %s", sha1_to_hex(entry->idx.sha1)); /* write limit if limited packsize and not first object */ limit = pack_size_limit && nr_written ? @@ -1096,9 +1098,6 @@ static void check_object(struct object_entry *entry) } entry->type = sha1_object_info(entry->idx.sha1, &entry->size); - if (entry->type < 0) - die("unable to get type of object %s", - sha1_to_hex(entry->idx.sha1)); } static int pack_offset_sort(const void *_a, const void *_b) -- 1.6.0.rc2.22.g71b99 -- Shawn. -- 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