Browse Source

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>
maint
René Scharfe 15 years ago committed by Junio C Hamano
parent
commit
c30c10cff1
  1. 9
      grep.c
  2. 6
      t/t7008-grep-binary.sh

9
grep.c

@ -873,6 +873,8 @@ static int grep_buffer_1(struct grep_opt *opt, const char *name, @@ -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, @@ -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, @@ -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;
}

6
t/t7008-grep-binary.sh

@ -27,6 +27,12 @@ test_expect_success 'git grep -I ina a' ' @@ -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…
Cancel
Save