From: René Scharfe Date: Sat, 22 May 2010 21:29:35 +0000 (+0200) Subject: grep: --count over binary X-Git-Tag: v1.7.2-rc0~77^2~5 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=c30c10cff1d640ce119596b907c10cc11f83358d;p=git.git grep: --count over binary The intent of showing the message "Binary file xyz matches" for binary files is to avoid annoying users by potentially messing up their terminals by printing control characters. In --count mode, this precaution isn't necessary. Display counts of matches if -c/--count was specified, even if -a was not given. GNU grep does the same. Moving the check for ->count before the code for handling binary file also avoids printing context lines if --count and -[ABC] were used together, so we can remove the part of the comment that mentions this behaviour. Again, GNU grep does the same. Signed-off-by: Rene Scharfe Signed-off-by: Junio C Hamano --- diff --git a/grep.c b/grep.c index 2a8e879e8..35c18b7e2 100644 --- a/grep.c +++ b/grep.c @@ -873,6 +873,8 @@ static int grep_buffer_1(struct grep_opt *opt, const char *name, count++; if (opt->status_only) return 1; + if (opt->count) + goto next_line; if (binary_match_only) { opt->output(opt, "Binary file ", 12); output_color(opt, name, strlen(name), @@ -886,16 +888,12 @@ static int grep_buffer_1(struct grep_opt *opt, const char *name, } /* Hit at this line. If we haven't shown the * pre-context lines, we would need to show them. - * When asked to do "count", this still show - * the context which is nonsense, but the user - * deserves to get that ;-). */ if (opt->pre_context) show_pre_context(opt, name, buf, bol, lno); else if (opt->funcname) show_funcname_line(opt, name, buf, bol, lno); - if (!opt->count) - show_line(opt, bol, eol, name, lno, ':'); + show_line(opt, bol, eol, name, lno, ':'); last_hit = lno; } else if (last_hit && @@ -939,6 +937,7 @@ static int grep_buffer_1(struct grep_opt *opt, const char *name, output_sep(opt, ':'); snprintf(buf, sizeof(buf), "%u\n", count); opt->output(opt, buf, strlen(buf)); + return 1; } return !!last_hit; } diff --git a/t/t7008-grep-binary.sh b/t/t7008-grep-binary.sh index 2320e74b6..91970eacd 100755 --- a/t/t7008-grep-binary.sh +++ b/t/t7008-grep-binary.sh @@ -27,6 +27,12 @@ test_expect_success 'git grep -I ina a' ' test_cmp expect actual ' +test_expect_success 'git grep -c ina a' ' + echo a:1 >expect && + git grep -c ina a >actual && + test_cmp expect actual +' + test_expect_success 'git grep -L bar a' ' echo a >expect && git grep -L bar a >actual &&