diff options
Diffstat (limited to 'builtin-checkout.c')
-rw-r--r-- | builtin-checkout.c | 37 |
1 files changed, 16 insertions, 21 deletions
diff --git a/builtin-checkout.c b/builtin-checkout.c index 9579ff4ab1..6b08016228 100644 --- a/builtin-checkout.c +++ b/builtin-checkout.c @@ -67,17 +67,8 @@ static int update_some(const unsigned char *sha1, const char *base, int baselen, static int read_tree_some(struct tree *tree, const char **pathspec) { - int newfd; - struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file)); - newfd = hold_locked_index(lock_file, 1); - read_cache(); - read_tree_recursive(tree, "", 0, 0, pathspec, update_some); - if (write_cache(newfd, active_cache, active_nr) || - commit_locked_index(lock_file)) - die("unable to write new index file"); - /* update the index with the given tree's info * for all args, expanding wildcards, and exit * with any non-zero return code. @@ -85,7 +76,7 @@ static int read_tree_some(struct tree *tree, const char **pathspec) return 0; } -static int checkout_paths(const char **pathspec) +static int checkout_paths(struct tree *source_tree, const char **pathspec) { int pos; struct checkout state; @@ -94,6 +85,15 @@ static int checkout_paths(const char **pathspec) int flag; struct commit *head; + int newfd; + struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file)); + + newfd = hold_locked_index(lock_file, 1); + read_cache(); + + if (source_tree) + read_tree_some(source_tree, pathspec); + for (pos = 0; pathspec[pos]; pos++) ; ps_matched = xcalloc(1, pos); @@ -116,6 +116,10 @@ static int checkout_paths(const char **pathspec) } } + if (write_cache(newfd, active_cache, active_nr) || + commit_locked_index(lock_file)) + die("unable to write new index file"); + resolve_ref("HEAD", rev, 0, &flag); head = lookup_commit_reference_gently(rev, 1); @@ -480,11 +484,6 @@ static int switch_branches(struct checkout_opts *opts, struct branch_info *new) return post_checkout_hook(old.commit, new->commit, 1); } -static int git_checkout_config(const char *var, const char *value) -{ - return git_default_config(var, value); -} - int cmd_checkout(int argc, const char **argv, const char *prefix) { struct checkout_opts opts; @@ -506,7 +505,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix) memset(&opts, 0, sizeof(opts)); memset(&new, 0, sizeof(new)); - git_config(git_checkout_config); + git_config(git_default_config); opts.track = git_branch_track; @@ -558,11 +557,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix) } } - if (source_tree) - read_tree_some(source_tree, pathspec); - else - read_cache(); - return checkout_paths(pathspec); + return checkout_paths(source_tree, pathspec); } if (new.name && !new.commit) { |