mirror of
https://github.com/git/git.git
synced 2024-11-18 19:13:58 +01:00
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 <rene.scharfe@lsrfire.ath.cx> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
64fcec78b5
commit
c30c10cff1
9
grep.c
9
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;
|
||||
}
|
||||
|
@ -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 &&
|
||||
|
Loading…
Reference in New Issue
Block a user