diff: factor out match_filter()

diffcore_apply_filter() checks if a filepair matches the filter
given with the "--diff-filter" option for each input filepairs with
a fairly complex expression in two places.

Create a helper function and call it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Junio C Hamano 2013-07-17 15:09:34 -07:00
parent 949226fe77
commit 08578fa13e

29
diff.c
View File

@ -4509,6 +4509,17 @@ free_queue:
}
}
static int match_filter(const struct diff_options *options, const struct diff_filepair *p)
{
return (((p->status == DIFF_STATUS_MODIFIED) &&
((p->score &&
strchr(options->filter, DIFF_STATUS_FILTER_BROKEN)) ||
(!p->score &&
strchr(options->filter, DIFF_STATUS_MODIFIED)))) ||
((p->status != DIFF_STATUS_MODIFIED) &&
strchr(options->filter, p->status)));
}
static void diffcore_apply_filter(struct diff_options *options)
{
int i;
@ -4524,14 +4535,7 @@ static void diffcore_apply_filter(struct diff_options *options)
if (strchr(filter, DIFF_STATUS_FILTER_AON)) {
int found;
for (i = found = 0; !found && i < q->nr; i++) {
struct diff_filepair *p = q->queue[i];
if (((p->status == DIFF_STATUS_MODIFIED) &&
((p->score &&
strchr(filter, DIFF_STATUS_FILTER_BROKEN)) ||
(!p->score &&
strchr(filter, DIFF_STATUS_MODIFIED)))) ||
((p->status != DIFF_STATUS_MODIFIED) &&
strchr(filter, p->status)))
if (match_filter(options, q->queue[i]))
found++;
}
if (found)
@ -4549,14 +4553,7 @@ static void diffcore_apply_filter(struct diff_options *options)
/* Only the matching ones */
for (i = 0; i < q->nr; i++) {
struct diff_filepair *p = q->queue[i];
if (((p->status == DIFF_STATUS_MODIFIED) &&
((p->score &&
strchr(filter, DIFF_STATUS_FILTER_BROKEN)) ||
(!p->score &&
strchr(filter, DIFF_STATUS_MODIFIED)))) ||
((p->status != DIFF_STATUS_MODIFIED) &&
strchr(filter, p->status)))
if (match_filter(options, p))
diff_q(&outq, p);
else
diff_free_filepair(p);