diff-lib: simplify do_diff_cache()
authorJunio C Hamano <gitster@pobox.com>
Thu, 14 Jul 2011 01:42:32 +0000 (18:42 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 14 Jul 2011 04:58:15 +0000 (21:58 -0700)
Since 34110cd (Make 'unpack_trees()' have a separate source and
destination index, 2008-03-06), we can run unpack_trees() without munging
the index at all, but do_diff_cache() tried ever so carefully to work
around the old behaviour of the function.

We can just tell unpack_trees() not to touch the original index and there
is no need to clean-up whatever the previous round has done.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff-lib.c

index fd61acbdce8c65f5146b15af0ab322501f271794..b5bb58d1832db97fc87addbc19f2234424e52dd6 100644 (file)
@@ -480,33 +480,9 @@ int do_diff_cache(const unsigned char *tree_sha1, struct diff_options *opt)
 {
        struct tree *tree;
        struct rev_info revs;
-       int i;
-       struct cache_entry **dst;
-       struct cache_entry *last = NULL;
        struct unpack_trees_options opts;
        struct tree_desc t;
 
-       /*
-        * This is used by git-blame to run diff-cache internally;
-        * it potentially needs to repeatedly run this, so we will
-        * start by removing the higher order entries the last round
-        * left behind.
-        */
-       dst = active_cache;
-       for (i = 0; i < active_nr; i++) {
-               struct cache_entry *ce = active_cache[i];
-               if (ce_stage(ce)) {
-                       if (last && !strcmp(ce->name, last->name))
-                               continue;
-                       cache_tree_invalidate_path(active_cache_tree,
-                                                  ce->name);
-                       last = ce;
-                       ce->ce_flags |= CE_REMOVE;
-               }
-               *dst++ = ce;
-       }
-       active_nr = dst - active_cache;
-
        init_revisions(&revs, NULL);
        init_pathspec(&revs.prune_data, opt->pathspec.raw);
        tree = parse_tree_indirect(tree_sha1);
@@ -521,7 +497,7 @@ int do_diff_cache(const unsigned char *tree_sha1, struct diff_options *opt)
        opts.fn = oneway_diff;
        opts.unpack_data = &revs;
        opts.src_index = &the_index;
-       opts.dst_index = &the_index;
+       opts.dst_index = NULL;
 
        init_tree_desc(&t, tree->buffer, tree->size);
        if (unpack_trees(1, &t, &opts))