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:
parent
949226fe77
commit
08578fa13e
29
diff.c
29
diff.c
@ -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)
|
static void diffcore_apply_filter(struct diff_options *options)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -4524,14 +4535,7 @@ static void diffcore_apply_filter(struct diff_options *options)
|
|||||||
if (strchr(filter, DIFF_STATUS_FILTER_AON)) {
|
if (strchr(filter, DIFF_STATUS_FILTER_AON)) {
|
||||||
int found;
|
int found;
|
||||||
for (i = found = 0; !found && i < q->nr; i++) {
|
for (i = found = 0; !found && i < q->nr; i++) {
|
||||||
struct diff_filepair *p = q->queue[i];
|
if (match_filter(options, 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)))
|
|
||||||
found++;
|
found++;
|
||||||
}
|
}
|
||||||
if (found)
|
if (found)
|
||||||
@ -4549,14 +4553,7 @@ static void diffcore_apply_filter(struct diff_options *options)
|
|||||||
/* Only the matching ones */
|
/* Only the matching ones */
|
||||||
for (i = 0; i < q->nr; i++) {
|
for (i = 0; i < q->nr; i++) {
|
||||||
struct diff_filepair *p = q->queue[i];
|
struct diff_filepair *p = q->queue[i];
|
||||||
|
if (match_filter(options, p))
|
||||||
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)))
|
|
||||||
diff_q(&outq, p);
|
diff_q(&outq, p);
|
||||||
else
|
else
|
||||||
diff_free_filepair(p);
|
diff_free_filepair(p);
|
||||||
|
Loading…
Reference in New Issue
Block a user