Merge branch 'sb/indent-heuristic-optim'

"git diff --indent-heuristic" had a bad corner case performance.

* sb/indent-heuristic-optim:
  xdiff: reduce indent heuristic overhead
This commit is contained in:
Junio C Hamano 2018-08-17 13:09:57 -07:00
commit 791ad49483

View File

@ -574,6 +574,11 @@ static void measure_split(const xdfile_t *xdf, long split,
*/ */
#define INDENT_WEIGHT 60 #define INDENT_WEIGHT 60
/*
* How far do we slide a hunk at most?
*/
#define INDENT_HEURISTIC_MAX_SLIDING 100
/* /*
* Compute a badness score for the hypothetical split whose measurements are * Compute a badness score for the hypothetical split whose measurements are
* stored in m. The weight factors were determined empirically using the tools and * stored in m. The weight factors were determined empirically using the tools and
@ -886,7 +891,12 @@ int xdl_change_compact(xdfile_t *xdf, xdfile_t *xdfo, long flags) {
long shift, best_shift = -1; long shift, best_shift = -1;
struct split_score best_score; struct split_score best_score;
for (shift = earliest_end; shift <= g.end; shift++) { shift = earliest_end;
if (g.end - groupsize - 1 > shift)
shift = g.end - groupsize - 1;
if (g.end - INDENT_HEURISTIC_MAX_SLIDING > shift)
shift = g.end - INDENT_HEURISTIC_MAX_SLIDING;
for (; shift <= g.end; shift++) {
struct split_measurement m; struct split_measurement m;
struct split_score score = {0, 0}; struct split_score score = {0, 0};