Make "tree_entry" have a SHA1 instead of a union of object pointers
[git.git] / builtin-read-tree.c
index ec40d01..f0b8dad 100644 (file)
@@ -38,7 +38,7 @@ static struct tree_entry_list df_conflict_list = {
 
 typedef int (*merge_fn_t)(struct cache_entry **src);
 
-static int entcmp(char *name1, int dir1, char *name2, int dir2)
+static int entcmp(const char *name1, int dir1, const char *name2, int dir2)
 {
        int len1 = strlen(name1);
        int len2 = strlen(name2);
@@ -66,7 +66,7 @@ static int unpack_trees_rec(struct tree_entry_list **posns, int len,
        int src_size = len + 1;
        do {
                int i;
-               char *first;
+               const char *first;
                int firstdir = 0;
                int pathlen;
                unsigned ce_size;
@@ -160,9 +160,10 @@ static int unpack_trees_rec(struct tree_entry_list **posns, int len,
                        }
 
                        if (posns[i]->directory) {
+                               struct tree *tree = lookup_tree(posns[i]->sha1);
                                any_dirs = 1;
-                               parse_tree(posns[i]->item.tree);
-                               subposns[i] = posns[i]->item.tree->entries;
+                               parse_tree(tree);
+                               subposns[i] = tree->entries;
                                posns[i] = posns[i]->next;
                                src[i + merge] = &df_conflict_entry;
                                continue;
@@ -186,7 +187,7 @@ static int unpack_trees_rec(struct tree_entry_list **posns, int len,
 
                        any_files = 1;
 
-                       memcpy(ce->sha1, posns[i]->item.any->sha1, 20);
+                       memcpy(ce->sha1, posns[i]->sha1, 20);
                        src[i + merge] = ce;
                        subposns[i] = &df_conflict_list;
                        posns[i] = posns[i]->next;