summaryrefslogtreecommitdiff
path: root/builtin-checkout.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-03-07 02:12:28 (GMT)
committerJunio C Hamano <gitster@pobox.com>2008-03-09 09:03:38 (GMT)
commit34110cd4e394e3f92c01a4709689b384c34645d8 (patch)
treeb98563eacd52df16ad3efec092ef8160b7873521 /builtin-checkout.c
parentbc052d7f435f8f729127cc4790484865c1a974b9 (diff)
downloadgit-34110cd4e394e3f92c01a4709689b384c34645d8.zip
git-34110cd4e394e3f92c01a4709689b384c34645d8.tar.gz
git-34110cd4e394e3f92c01a4709689b384c34645d8.tar.bz2
Make 'unpack_trees()' have a separate source and destination index
We will always unpack into our own internal index, but we will take the source from wherever specified, and we will optionally write the result to a specified index (optionally, because not everybody even _wants_ any result: the index diffing really wants to just walk the tree and index in parallel). This ends up removing a fair number more lines than it adds, for the simple reason that we can now skip all the crud that tried to be oh-so-careful about maintaining our position in the index as we were traversing and modifying it. Since we don't actually modify the source index any more, we can just update the 'o->pos' pointer without worrying about whether an index entry got removed or replaced or added to. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin-checkout.c')
-rw-r--r--builtin-checkout.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/builtin-checkout.c b/builtin-checkout.c
index 9bdb623..7deb504 100644
--- a/builtin-checkout.c
+++ b/builtin-checkout.c
@@ -160,7 +160,8 @@ static int reset_to_new(struct tree *tree, int quiet)
opts.merge = 1;
opts.fn = oneway_merge;
opts.verbose_update = !quiet;
- opts.index = &the_index;
+ opts.src_index = &the_index;
+ opts.dst_index = &the_index;
parse_tree(tree);
init_tree_desc(&tree_desc, tree->buffer, tree->size);
if (unpack_trees(1, &tree_desc, &opts))
@@ -180,7 +181,8 @@ static void reset_clean_to_new(struct tree *tree, int quiet)
opts.merge = 1;
opts.fn = oneway_merge;
opts.verbose_update = !quiet;
- opts.index = &the_index;
+ opts.src_index = &the_index;
+ opts.dst_index = &the_index;
parse_tree(tree);
init_tree_desc(&tree_desc, tree->buffer, tree->size);
if (unpack_trees(1, &tree_desc, &opts))
@@ -231,7 +233,8 @@ static int merge_working_tree(struct checkout_opts *opts,
memset(&topts, 0, sizeof(topts));
topts.head_idx = -1;
- topts.index = &the_index;
+ topts.src_index = &the_index;
+ topts.dst_index = &the_index;
refresh_cache(REFRESH_QUIET);