Re: [PATCH] grep: do not do external grep on skip-worktree entries
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:48:00
Linus Torvalds [off-list ref] writes:
The bad news is that you broke multi-line greps: git grep --no-ext-grep -2 qwerty.*as results in: drivers/char/keyboard.c-unsigned char kbd_sysrq_xlate[KEY_MAX + 1] = drivers/char/keyboard.c- "\000\0331234567890-=\177\t" /* 0x00 - 0x0f */ drivers/char/keyboard.c: "qwertyuiop[]\r\000as" /* 0x10 - 0x1f */
Meh. I checked pre-context codepath before sending the patch and was very satisfied that René did the right thing in 49de321 (grep: handle pre context lines on demand, 2009-07-02), but somehow forgot about the post context codepath. An ObviouslyRightThing fix is this two-liner. We shouldn't lookahead if we want to do something more than just skipping when we see an unmatch for the line we are currently looking at. grep.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/grep.c b/grep.c
index 940e200..ac0ce0b 100644
--- a/grep.c
+++ b/grep.c@@ -719,6 +719,8 @@ static int grep_buffer_1(struct grep_opt *opt, const char *name, int hit; if (try_lookahead + && !(last_hit + && lno <= last_hit + opt->post_context) && look_ahead(opt, &left, &lno, &bol)) break; eol = end_of_line(bol, &left);