general improvements
[gitweb.git] / tree.c
diff --git a/tree.c b/tree.c
index 0b5c84d0d79ff6e598d50c829df47c4dcce7d32c..1466bcc6a8cf093970dc3d39e5554a61112548fd 100644 (file)
--- a/tree.c
+++ b/tree.c
@@ -1,4 +1,3 @@
-#define NO_THE_INDEX_COMPATIBILITY_MACROS
 #include "cache.h"
 #include "cache-tree.h"
 #include "tree.h"
@@ -86,7 +85,7 @@ static int read_tree_1(struct repository *r,
                                continue;
                }
 
-               switch (fn(entry.oid, base,
+               switch (fn(&entry.oid, base,
                           entry.path, entry.mode, stage, context)) {
                case 0:
                        continue;
@@ -97,19 +96,19 @@ static int read_tree_1(struct repository *r,
                }
 
                if (S_ISDIR(entry.mode))
-                       oidcpy(&oid, entry.oid);
+                       oidcpy(&oid, &entry.oid);
                else if (S_ISGITLINK(entry.mode)) {
                        struct commit *commit;
 
-                       commit = lookup_commit(r, entry.oid);
+                       commit = lookup_commit(r, &entry.oid);
                        if (!commit)
                                die("Commit %s in submodule path %s%s not found",
-                                   oid_to_hex(entry.oid),
+                                   oid_to_hex(&entry.oid),
                                    base->buf, entry.path);
 
                        if (parse_commit(commit))
                                die("Invalid commit %s in submodule path %s%s",
-                                   oid_to_hex(entry.oid),
+                                   oid_to_hex(&entry.oid),
                                    base->buf, entry.path);
 
                        oidcpy(&oid, get_commit_tree_oid(commit));
@@ -198,10 +197,9 @@ int read_tree(struct repository *r, struct tree *tree, int stage,
 
 struct tree *lookup_tree(struct repository *r, const struct object_id *oid)
 {
-       struct object *obj = lookup_object(r, oid->hash);
+       struct object *obj = lookup_object(r, oid);
        if (!obj)
-               return create_object(r, oid->hash,
-                                    alloc_tree_node(r));
+               return create_object(r, oid, alloc_tree_node(r));
        return object_as_type(r, obj, OBJ_TREE, 0);
 }
 
@@ -246,19 +244,7 @@ void free_tree_buffer(struct tree *tree)
 
 struct tree *parse_tree_indirect(const struct object_id *oid)
 {
-       struct object *obj = parse_object(the_repository, oid);
-       do {
-               if (!obj)
-                       return NULL;
-               if (obj->type == OBJ_TREE)
-                       return (struct tree *) obj;
-               else if (obj->type == OBJ_COMMIT)
-                       obj = &(get_commit_tree(((struct commit *)obj))->object);
-               else if (obj->type == OBJ_TAG)
-                       obj = ((struct tag *) obj)->tagged;
-               else
-                       return NULL;
-               if (!obj->parsed)
-                       parse_object(the_repository, &obj->oid);
-       } while (1);
+       struct repository *r = the_repository;
+       struct object *obj = parse_object(r, oid);
+       return (struct tree *)repo_peel_to_type(r, NULL, 0, obj, OBJ_TREE);
 }