X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=diffcore-pickaxe.c;h=fea62d51a090e22e43938245747e409ea7ede883;hb=e871b649a3f4ede26eb98c7d46df7acdc7ecbe81;hp=ee22e36abc3ccfce7a92f33134353d2a0d1576f9;hpb=52e9578985fb636ec1d3f6cf794fdadd5ec896fc;p=git.git diff --git a/diffcore-pickaxe.c b/diffcore-pickaxe.c index ee22e36ab..fea62d51a 100644 --- a/diffcore-pickaxe.c +++ b/diffcore-pickaxe.c @@ -21,8 +21,9 @@ static int contains(struct diff_filespec *one, return 0; } -void diff_pickaxe(struct diff_queue_struct *q, const char *needle) +void diffcore_pickaxe(const char *needle) { + struct diff_queue_struct *q = &diff_queued_diff; unsigned long len = strlen(needle); int i; struct diff_queue_struct outq; @@ -31,24 +32,24 @@ void diff_pickaxe(struct diff_queue_struct *q, const char *needle) for (i = 0; i < q->nr; i++) { struct diff_filepair *p = q->queue[i]; - if (!p->one->file_valid) { - if (!p->two->file_valid) + int onum = outq.nr; + if (!DIFF_FILE_VALID(p->one)) { + if (!DIFF_FILE_VALID(p->two)) continue; /* ignore nonsense */ /* created */ if (contains(p->two, needle, len)) - diff_queue(&outq, p->one, p->two); + diff_q(&outq, p); } - else if (!p->two->file_valid) { + else if (!DIFF_FILE_VALID(p->two)) { if (contains(p->one, needle, len)) - diff_queue(&outq, p->one, p->two); + diff_q(&outq, p); } - else if (contains(p->one, needle, len) != + else if (!diff_unmodified_pair(p) && + contains(p->one, needle, len) != contains(p->two, needle, len)) - diff_queue(&outq, p->one, p->two); - } - for (i = 0; i < q->nr; i++) { - struct diff_filepair *p = q->queue[i]; - free(p); + diff_q(&outq, p); + if (onum == outq.nr) + free(p); } free(q->queue); *q = outq;