git-pack-objects: do the delta search in reverse size order
[gitweb.git] / tree.c
diff --git a/tree.c b/tree.c
index ca800a85f771be1bd10d6575d93ca05bd3fc381c..96f78f6a3407ee86ab73de736e0485614017cb92 100644 (file)
--- a/tree.c
+++ b/tree.c
@@ -18,7 +18,7 @@ static int read_one_entry(unsigned char *sha1, const char *base, int baselen, co
        memcpy(ce->name, base, baselen);
        memcpy(ce->name + baselen, pathname, len+1);
        memcpy(ce->sha1, sha1, 20);
-       return add_cache_entry(ce, ADD_CACHE_OK_TO_ADD);
+       return add_cache_entry(ce, ADD_CACHE_OK_TO_ADD|ADD_CACHE_SKIP_DFCHECK);
 }
 
 static int read_tree_recursive(void *buffer, unsigned long size,
@@ -73,7 +73,7 @@ int read_tree(void *buffer, unsigned long size, int stage)
        return read_tree_recursive(buffer, size, "", 0, stage);
 }
 
-struct tree *lookup_tree(unsigned char *sha1)
+struct tree *lookup_tree(const unsigned char *sha1)
 {
        struct object *obj = lookup_object(sha1);
        if (!obj) {
@@ -83,6 +83,8 @@ struct tree *lookup_tree(unsigned char *sha1)
                ret->object.type = tree_type;
                return ret;
        }
+       if (!obj->type)
+               obj->type = tree_type;
        if (obj->type != tree_type) {
                error("Object %s is a %s, not a tree", 
                      sha1_to_hex(sha1), obj->type);
@@ -131,7 +133,7 @@ int parse_tree_buffer(struct tree *item, void *buffer, unsigned long size)
                }
                if (obj)
                        add_ref(&item->object, obj);
-
+               entry->parent = NULL; /* needs to be filled by the user */
                *list_p = entry;
                list_p = &entry->next;
        }