file_change_m checks object type for objects specified by sha1. It does so via sha1_object_info but doesn't cache this information in struct object_entry. Make this call to sha1_object_info cached in struct object_entry. Signed-off-by: Dmitry Ivankov <divanorama@xxxxxxxxx> --- fast-import.c | 22 ++++++++++++++-------- 1 files changed, 14 insertions(+), 8 deletions(-) diff --git a/fast-import.c b/fast-import.c index 742e7da..42f9b17 100644 --- a/fast-import.c +++ b/fast-import.c @@ -2297,15 +2297,21 @@ static void file_change_m(struct branch *b) } else { enum object_type expected = S_ISDIR(mode) ? OBJ_TREE: OBJ_BLOB; - enum object_type type = oe ? oe->type : - sha1_object_info(sha1, NULL); - if (type < 0) - die("%s not found: %s", - S_ISDIR(mode) ? "Tree" : "Blob", - command_buf.buf); - if (type != expected) + if (!oe) + oe = insert_object(sha1); + if (!oe->idx.offset) { + enum object_type type = sha1_object_info(oe->idx.sha1, NULL); + if (type < 0) + die("%s not found: %s", + S_ISDIR(mode) ? "Tree" : "Blob", + command_buf.buf); + oe->type = type; + oe->pack_id = MAX_PACK_ID; + oe->idx.offset = 1; /* nonzero */ + } + if (oe->type != expected) die("Not a %s (actually a %s): %s", - typename(expected), typename(type), + typename(expected), typename(oe->type), command_buf.buf); } -- 1.7.3.4 -- 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