Browse Source

builtin-grep: -L (--files-without-match).

Signed-off-by: Junio C Hamano <junkio@cox.net>
maint
Junio C Hamano 19 years ago
parent
commit
e23d2d6b76
  1. 20
      builtin-grep.c

20
builtin-grep.c

@ -93,6 +93,7 @@ struct grep_opt { @@ -93,6 +93,7 @@ struct grep_opt {
unsigned linenum:1;
unsigned invert:1;
unsigned name_only:1;
unsigned unmatch_name_only:1;
unsigned count:1;
unsigned word_regexp:1;
#define GREP_BINARY_DEFAULT 0
@ -241,6 +242,11 @@ static int grep_buffer(struct grep_opt *opt, const char *name, @@ -241,6 +242,11 @@ static int grep_buffer(struct grep_opt *opt, const char *name,
*/
if (opt->invert)
hit = !hit;
if (opt->unmatch_name_only) {
if (hit)
return 0;
goto next_line;
}
if (hit) {
count++;
if (binary_match_only) {
@ -297,6 +303,8 @@ static int grep_buffer(struct grep_opt *opt, const char *name, @@ -297,6 +303,8 @@ static int grep_buffer(struct grep_opt *opt, const char *name,
prev->bol = bol;
prev->eol = eol;
}

next_line:
*eol = ch;
bol = eol + 1;
if (!left)
@ -304,6 +312,13 @@ static int grep_buffer(struct grep_opt *opt, const char *name, @@ -304,6 +312,13 @@ static int grep_buffer(struct grep_opt *opt, const char *name,
left--;
lno++;
}

if (opt->unmatch_name_only) {
/* We did not see any hit, so we want to show this */
printf("%s\n", name);
return 1;
}

/* NEEDSWORK:
* The real "grep -c foo *.c" gives many "bar.c:0" lines,
* which feels mostly useless but sometimes useful. Maybe
@ -532,6 +547,11 @@ int cmd_grep(int argc, const char **argv, char **envp) @@ -532,6 +547,11 @@ int cmd_grep(int argc, const char **argv, char **envp)
opt.name_only = 1;
continue;
}
if (!strcmp("-L", arg) ||
!strcmp("--files-without-match", arg)) {
opt.unmatch_name_only = 1;
continue;
}
if (!strcmp("-c", arg) ||
!strcmp("--count", arg)) {
opt.count = 1;

Loading…
Cancel
Save