diff --color-moved: unify moved block growth functions

After the last two commits pmb_advance_or_null() and
pmb_advance_or_null_multi_match() differ only in the comparison they
perform. Lets simplify the code by combining them into a single
function.

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Phillip Wood 2021-12-09 10:30:04 +00:00 committed by Junio C Hamano
parent 08fba1076f
commit ff046a0066

41
diff.c
View file

@ -1002,36 +1002,23 @@ static void pmb_advance_or_null(struct diff_options *o,
unsigned flags = o->color_moved_ws_handling & XDF_WHITESPACE_FLAGS; unsigned flags = o->color_moved_ws_handling & XDF_WHITESPACE_FLAGS;
for (i = 0; i < pmb_nr; i++) { for (i = 0; i < pmb_nr; i++) {
int match;
struct moved_entry *prev = pmb[i].match; struct moved_entry *prev = pmb[i].match;
struct moved_entry *cur = (prev && prev->next_line) ? struct moved_entry *cur = (prev && prev->next_line) ?
prev->next_line : NULL; prev->next_line : NULL;
if (cur && xdiff_compare_lines(cur->es->line, cur->es->len,
l->line, l->len,
flags)) {
pmb[i].match = cur;
} else {
pmb[i].match = NULL;
}
}
}
static void pmb_advance_or_null_multi_match(struct diff_options *o, if (o->color_moved_ws_handling &
struct emitted_diff_symbol *l, COLOR_MOVED_WS_ALLOW_INDENTATION_CHANGE)
struct moved_block *pmb, match = cur &&
int pmb_nr) !cmp_in_block_with_wsd(cur, l, &pmb[i]);
{ else
int i; match = cur &&
xdiff_compare_lines(cur->es->line, cur->es->len,
for (i = 0; i < pmb_nr; i++) { l->line, l->len, flags);
struct moved_entry *prev = pmb[i].match; if (match)
struct moved_entry *cur = (prev && prev->next_line) ?
prev->next_line : NULL;
if (cur && !cmp_in_block_with_wsd(cur, l, &pmb[i])) {
/* Advance to the next line */
pmb[i].match = cur; pmb[i].match = cur;
} else { else
moved_block_clear(&pmb[i]); moved_block_clear(&pmb[i]);
}
} }
} }
@ -1194,11 +1181,7 @@ static void mark_color_as_moved(struct diff_options *o,
continue; continue;
} }
if (o->color_moved_ws_handling & pmb_advance_or_null(o, l, pmb, pmb_nr);
COLOR_MOVED_WS_ALLOW_INDENTATION_CHANGE)
pmb_advance_or_null_multi_match(o, l, pmb, pmb_nr);
else
pmb_advance_or_null(o, l, pmb, pmb_nr);
pmb_nr = shrink_potential_moved_blocks(pmb, pmb_nr); pmb_nr = shrink_potential_moved_blocks(pmb, pmb_nr);