Skip to content

Commit

Permalink
diffcore-rename: speed up register_rename_src
Browse files Browse the repository at this point in the history
Teach register_rename_src() to see if new file pair
can simply be appended to the rename_src[] array before
performing the binary search to find the proper insertion
point.

This is a performance optimization.  This routine is called
during run_diff_files in status and the caller is iterating
over the sorted index, so we should expect to be able to
append in the normal case.  The existing insert logic is
preserved so we don't have to assume that, but simply take
advantage of it if possible.

Signed-off-by: Jeff Hostetler <[email protected]>
  • Loading branch information
jeffhostetler authored and Git for Windows Build Agent committed Jan 18, 2017
1 parent f72377d commit cdd6426
Showing 1 changed file with 13 additions and 0 deletions.
13 changes: 13 additions & 0 deletions diffcore-rename.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,18 @@ static struct diff_rename_src *register_rename_src(struct diff_filepair *p)

first = 0;
last = rename_src_nr;

if (last > 0) {
struct diff_rename_src *src = &(rename_src[last-1]);
int cmp = strcmp(one->path, src->p->one->path);
if (!cmp)
return src;
if (cmp > 0) {
first = last;
goto append_it;
}
}

while (last > first) {
int next = (last + first) >> 1;
struct diff_rename_src *src = &(rename_src[next]);
Expand All @@ -94,6 +106,7 @@ static struct diff_rename_src *register_rename_src(struct diff_filepair *p)
first = next+1;
}

append_it:
/* insert to make it at "first" */
ALLOC_GROW(rename_src, rename_src_nr + 1, rename_src_alloc);
rename_src_nr++;
Expand Down

0 comments on commit cdd6426

Please sign in to comment.