Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
builtin-grep: -L (--files-without-match).
author
Junio C Hamano
<junkio@cox.net>
Thu, 4 May 2006 04:46:29 +0000
(21:46 -0700)
committer
Junio C Hamano
<junkio@cox.net>
Thu, 4 May 2006 04:46:29 +0000
(21:46 -0700)
Signed-off-by: Junio C Hamano <junkio@cox.net>
builtin-grep.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
b8d0f5a
)
diff --git
a/builtin-grep.c
b/builtin-grep.c
index 0d6115763bf3c9f409518daa000f51951a7f0c95..c89ee33a1ede4e032cae850315ee2b2185a64457 100644
(file)
--- a/
builtin-grep.c
+++ b/
builtin-grep.c
@@
-93,6
+93,7
@@
struct grep_opt {
unsigned linenum:1;
unsigned invert:1;
unsigned name_only:1;
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
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,
*/
if (opt->invert)
hit = !hit;
*/
if (opt->invert)
hit = !hit;
+ if (opt->unmatch_name_only) {
+ if (hit)
+ return 0;
+ goto next_line;
+ }
if (hit) {
count++;
if (binary_match_only) {
if (hit) {
count++;
if (binary_match_only) {
@@
-297,6
+303,8
@@
static int grep_buffer(struct grep_opt *opt, const char *name,
prev->bol = bol;
prev->eol = eol;
}
prev->bol = bol;
prev->eol = eol;
}
+
+ next_line:
*eol = ch;
bol = eol + 1;
if (!left)
*eol = ch;
bol = eol + 1;
if (!left)
@@
-304,6
+312,13
@@
static int grep_buffer(struct grep_opt *opt, const char *name,
left--;
lno++;
}
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
/* 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)
opt.name_only = 1;
continue;
}
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;
if (!strcmp("-c", arg) ||
!strcmp("--count", arg)) {
opt.count = 1;