[bsdgrep] grep -ql does not supress output
Doug Barton
dougb at FreeBSD.org
Sat Jul 24 04:50:49 UTC 2010
On Sat, 24 Jul 2010, Gabor Kovesdan wrote:
> Em 2010.07.24. 6:19, Doug Barton escreveu:
>> There are several places in portmaster where I use '[e]grep -ql <foo>' to
>> signal existence of something without having to deal with the output of
>> grep. In oldgrep this worked as advertised. In bsdgrep it doesn't.
>>
>> Furthermore, looking at the code it doesn't seem like it's a trivial fix
>> since you seem to be conflating the idea of -q with "don't output the
>> matching lines" instead of "don't output anything" which is what the old
>> one did:
>>
>> case 'l':
>> Lflag = false;
>> lflag = qflag = true;
>> break;
>>
>> Also, looking at the code it's not clear to me that the -q option has its
>> previous behavior of halting processing for that file on the first match,
>> but I've only given it a quick look.
>>
>> So, request number 1, fix it so that bsdgrep -ql doesn't output anything,
>> and make sure that -q actually halts processing on the first match.
>
> Of course both this and the color issue will be fixed.
Thanks. I took another look at it, and I think the attached patch does
the trick, although you'll probably want to regression test it. I'm
running some limited tests now as well. I still haven't verified that -q
halts processing on the first match however.
>> Request number 2, think about whether or not introducing this as the
>> default was the right course of action. I held my tongue on this when you
>> committed it, but in the past when such things have been added they start
>> life as an option, allowing those who choose to do so to regression test
>> them. Once they've had a shakeout period THEN the switch is flipped to make
>> them the default. I'm not at the point yet where I'm ready to ask for you
>> to change this, but between the color thing and this issue, that ball has
>> started to roll, in my mind at least. We'll see what happens with more
>> testing.
>
> This change was thoroughly tested on pointyhat and by several interested
> people even by you. Actually, the compatibility for non-standard GNU regexes
> were added when you requested it after trying out with portmaster.
Yes, IIRC that was when I last tested it for you about 2 years ago. And
I appreciate you adding that support.
> Why didn't you tell me earlier about this bug then, as well?
My fuzzy recollection is that the various micro-optimizations such as
this one have been added to portmaster in the intervening 2 years, but I
could be wrong. If the bug and my code were both there 2 years ago,
please accept my apologies for not reporting it sooner.
Meanwhile, pointyhat runs are great for trying to assess bare technical
compatibility with known combinations of options; however as I've
learned in trying to regression-test portmaster, real human users are
roughly infinitely more creative than that. :)
hth,
Doug
--
Improve the effectiveness of your Internet presence with
a domain name makeover! http://SupersetSolutions.com/
Computers are useless. They can only give you answers.
-- Pablo Picasso
-------------- next part --------------
Index: grep.c
===================================================================
--- grep.c (revision 210438)
+++ grep.c (working copy)
@@ -466,11 +466,11 @@
break;
case 'L':
lflag = false;
- Lflag = qflag = true;
+ Lflag = true;
break;
case 'l':
Lflag = false;
- lflag = qflag = true;
+ lflag = true;
break;
case 'm':
mflag = true;
Index: util.c
===================================================================
--- util.c (revision 210438)
+++ util.c (working copy)
@@ -226,9 +226,9 @@
printf("%s:", ln.file);
printf("%u\n", c);
}
- if (lflag && c != 0)
+ if (lflag && !qflag && c != 0)
printf("%s\n", fn);
- if (Lflag && c == 0)
+ if (Lflag && !qflag && c == 0)
printf("%s\n", fn);
if (c && !cflag && !lflag && !Lflag &&
binbehave == BINFILE_BIN && f->binary && !qflag)
@@ -342,7 +342,7 @@
return (c); /* Binary file */
/* Dealing with the context */
- if ((tail || c) && !cflag && !qflag) {
+ if ((tail || c) && !cflag && !qflag && !lflag) {
if (c) {
if (!first && !prev && !tail && Aflag)
printf("--\n");
More information about the freebsd-current
mailing list