]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Speed-up recursive by flushing index only once for all entries
authorAlex Riesen <raa.lkml@gmail.com>
Thu, 4 Jan 2007 10:22:47 +0000 (11:22 +0100)
committerJunio C Hamano <junkio@cox.net>
Wed, 10 Jan 2007 22:45:20 +0000 (14:45 -0800)
The merge-recursive implementation in C inherited the invariant
that the on-file index file is written out and later read back
after any index operations and writing trees from the original
Python implementation.  But it was only because the original
implementation worked at the scripting level.

There is no need to write out the index file after handling
every path.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
merge-recursive.c

index 87a27e0379c87efc8f04a4cf826f1bc7da242d34..aab4c3458884455608466d377de8942f82b04aca 100644 (file)
@@ -954,8 +954,6 @@ static int process_renames(struct path_list *a_renames,
        path_list_clear(&a_by_dst, 0);
        path_list_clear(&b_by_dst, 0);
 
-       if (cache_dirty)
-               flush_cache();
        return clean_merge;
 }
 
@@ -1083,9 +1081,6 @@ static int process_entry(const char *path, struct stage_data *entry,
        } else
                die("Fatal merge failure, shouldn't happen.");
 
-       if (cache_dirty)
-               flush_cache();
-
        return clean_merge;
 }
 
@@ -1133,6 +1128,8 @@ static int merge_trees(struct tree *head,
                        if (!process_entry(path, e, branch1, branch2))
                                clean = 0;
                }
+               if (cache_dirty)
+                       flush_cache();
 
                path_list_clear(re_merge, 0);
                path_list_clear(re_head, 0);