[PATCH 1/8] fast-import: cache oe in file_change_m
- From
Dmitry Ivankov <divanorama@gmail.com>
- Date
- Sep 19, 2011, 01:27 UTC
- Message-ID
- <1316395657-6991-2-git-send-email-divanorama@gmail.com>
- In-Reply-To
- <1316395657-6991-1-git-send-email-divanorama@gmail.com>
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@gmail.com> --- 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