[PATCH 1/3] sha1_object_info(): pay attention to cached objects
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Aug 21, 2008, 08:43 UTC
- Message-ID
- <7vej4ikbc2.fsf_-_@gitster.siamese.dyndns.org>
- In-Reply-To
- <7viqtukbec.fsf@gitster.siamese.dyndns.org>
We have some hardcoded objects (e.g. "empty tree") and also an interface to pretend we have objects in-core without ever writing them out to the disk. read_sha1_file() are aware of these cached objects. However, some codepaths use sha1_object_info() to find out the availability and size of the object without reading the object data, without using read_sha1_file().
This teaches sha1_object_info() about these cached objects.
Signed-off-by: Junio C Hamano <gitster@pobox.com> --- sha1_file.c | 22 ++++++++++++++++------ 1 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/sha1_file.c b/sha1_file.c index 2aff59b..d9e342e 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -1926,10 +1926,25 @@ static int sha1_loose_object_info(const unsigned char *sha1, unsigned long *size return status; } +struct cached_object { + unsigned char sha1[20]; + enum object_type type; + void *buf; + unsigned long size; +}; +static struct cached_object *find_cached_object(const unsigned char *sha1); + int sha1_object_info(const unsigned char *sha1, unsigned long *sizep) { struct pack_entry e; int status; + struct cached_object *co; + + co = find_cached_object(sha1); + if (co) { + *sizep = co->size; + return co->type; + } if (!find_pack_entry(sha1, &e, NULL)) { /* Most likely it's a loose object. */ @@ -1975,12 +1990,7 @@ static void *read_packed_sha1(const unsigned char *sha1, * to write them into the object store (e.g. a browse-only * application). */ -static struct cached_object { - unsigned char sha1[20]; - enum object_type type; - void *buf; - unsigned long size; -} *cached_objects; +static struct cached_object *cached_objects; static int cached_object_nr, cached_object_alloc; static struct cached_object empty_tree = {
-- 1.6.0.51.g078ae