Code

cat-file --batch / --batch-check: do not exit if hashes are missing
[git.git] / builtin-read-tree.c
index 0138f5a9172034b2ce34222ff077a975f8998005..5a09e17f1ad4fe19cf4e7cc29235d14d35405168 100644 (file)
 #include "dir.h"
 #include "builtin.h"
 
-#define MAX_TREES 8
 static int nr_trees;
-static struct tree *trees[MAX_TREES];
+static struct tree *trees[MAX_UNPACK_TREES];
 
 static int list_tree(unsigned char *sha1)
 {
        struct tree *tree;
 
-       if (nr_trees >= MAX_TREES)
-               die("I cannot read more than %d trees", MAX_TREES);
+       if (nr_trees >= MAX_UNPACK_TREES)
+               die("I cannot read more than %d trees", MAX_UNPACK_TREES);
        tree = parse_tree_indirect(sha1);
        if (!tree)
                return -1;
@@ -41,7 +40,7 @@ static int read_cache_unmerged(void)
        for (i = 0; i < active_nr; i++) {
                struct cache_entry *ce = active_cache[i];
                if (ce_stage(ce)) {
-                       remove_index_entry(ce);
+                       remove_name_hash(ce);
                        if (last && !strcmp(ce->name, last->name))
                                continue;
                        cache_tree_invalidate_path(active_cache_tree, ce->name);
@@ -97,18 +96,18 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
 {
        int i, newfd, stage = 0;
        unsigned char sha1[20];
-       struct tree_desc t[MAX_TREES];
+       struct tree_desc t[MAX_UNPACK_TREES];
        struct unpack_trees_options opts;
 
        memset(&opts, 0, sizeof(opts));
        opts.head_idx = -1;
+       opts.src_index = &the_index;
+       opts.dst_index = &the_index;
 
-       git_config(git_default_config);
+       git_config(git_default_config, NULL);
 
        newfd = hold_locked_index(&lock_file, 1);
 
-       git_config(git_default_config);
-
        for (i = 1; i < argc; i++) {
                const char *arg = argv[i];
 
@@ -220,27 +219,6 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
        if ((opts.dir && !opts.update))
                die("--exclude-per-directory is meaningless unless -u");
 
-       if (opts.prefix) {
-               int pfxlen = strlen(opts.prefix);
-               int pos;
-               if (opts.prefix[pfxlen-1] != '/')
-                       die("prefix must end with /");
-               if (stage != 2)
-                       die("binding merge takes only one tree");
-               pos = cache_name_pos(opts.prefix, pfxlen);
-               if (0 <= pos)
-                       die("corrupt index file");
-               pos = -pos-1;
-               if (pos < active_nr &&
-                   !strncmp(active_cache[pos]->name, opts.prefix, pfxlen))
-                       die("subdirectory '%s' already exists.", opts.prefix);
-               pos = cache_name_pos(opts.prefix, pfxlen-1);
-               if (0 <= pos)
-                       die("file '%.*s' already exists.",
-                                       pfxlen-1, opts.prefix);
-               opts.pos = -1 - pos;
-       }
-
        if (opts.merge) {
                if (stage < 2)
                        die("just how do you expect me to merge %d trees?", stage-1);