GIT v1.5.2-rc3
[gitweb.git] / builtin-read-tree.c
index 82df94101a20a9ea9c06cd6d6ce8db56d8a7de18..316fb0f8dae022b35a89b71c94a22331a77a500a 100644 (file)
@@ -84,7 +84,7 @@ static void prime_cache_tree(void)
 
 }
 
-static const char read_tree_usage[] = "git-read-tree (<sha> | [[-m [--aggressive] | --reset | --prefix=<prefix>] [-u | -i]] [--exclude-per-directory=<gitignore>] <sha1> [<sha2> [<sha3>]])";
+static const char read_tree_usage[] = "git-read-tree (<sha> | [[-m [--aggressive] | --reset | --prefix=<prefix>] [-u | -i]] [--exclude-per-directory=<gitignore>] [--index-output=<file>] <sha1> [<sha2> [<sha3>]])";
 
 static struct lock_file lock_file;
 
@@ -100,7 +100,7 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
        setup_git_directory();
        git_config(git_default_config);
 
-       newfd = hold_lock_file_for_update(&lock_file, get_index_file(), 1);
+       newfd = hold_locked_index(&lock_file, 1);
 
        git_config(git_default_config);
 
@@ -128,6 +128,11 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
                        continue;
                }
 
+               if (!prefixcmp(arg, "--index-output=")) {
+                       set_alternate_index_output(arg + 15);
+                       continue;
+               }
+
                /* "--prefix=<subdirectory>/" means keep the current index
                 *  entries and put the entries from the tree under the
                 * given subdirectory.
@@ -184,7 +189,7 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
                        if (opts.dir)
                                die("more than one --exclude-per-directory are given.");
 
-                       dir = calloc(1, sizeof(*opts.dir));
+                       dir = xcalloc(1, sizeof(*opts.dir));
                        dir->show_ignored = 1;
                        dir->exclude_per_dir = arg + 24;
                        opts.dir = dir;
@@ -228,6 +233,7 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
                if (0 <= pos)
                        die("file '%.*s' already exists.",
                                        pfxlen-1, opts.prefix);
+               opts.pos = -1 - pos;
        }
 
        if (opts.merge) {
@@ -267,7 +273,7 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
        }
 
        if (write_cache(newfd, active_cache, active_nr) ||
-           close(newfd) || commit_lock_file(&lock_file))
+           close(newfd) || commit_locked_index(&lock_file))
                die("unable to write new index file");
        return 0;
 }