From 6b14d7faf0bad026a81a27bac07b47691f621b8f Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Sun, 22 May 2005 10:04:37 -0700 Subject: [PATCH] Diffcore updates. This moves the path selection logic from individual programs to a new diffcore transformer (diff-tree still needs to have its own for performance reasons). Also the header printing code in diff-tree was tweaked not to produce anything when pickaxe is in effect and there is nothing interesting to report. An interesting example is the following in the GIT archive itself: $ git-whatchanged -p -C -S'or something in a real script' Signed-off-by: Junio C Hamano Signed-off-by: Linus Torvalds --- diffcore-pickaxe.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'diffcore-pickaxe.c') diff --git a/diffcore-pickaxe.c b/diffcore-pickaxe.c index 0bad705d57..08d1bb7446 100644 --- a/diffcore-pickaxe.c +++ b/diffcore-pickaxe.c @@ -21,7 +21,7 @@ static int contains(struct diff_filespec *one, return 0; } -void diff_pickaxe(const char *needle) +void diffcore_pickaxe(const char *needle) { struct diff_queue_struct *q = &diff_queued_diff; unsigned long len = strlen(needle); @@ -32,24 +32,23 @@ void diff_pickaxe(const char *needle) for (i = 0; i < q->nr; i++) { struct diff_filepair *p = q->queue[i]; + 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 (!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) != 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) + diff_free_filepair(p); } free(q->queue); *q = outq; -- cgit v1.2.3