grep: read patterns from stdin with -f -
Support the well-know convention of reading standard input instead of a named file if "-" (dash) is specified. 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
af4c62ae88
commit
c41dd2fd7d
@ -659,11 +659,12 @@ static int context_callback(const struct option *opt, const char *arg,
|
||||
static int file_callback(const struct option *opt, const char *arg, int unset)
|
||||
{
|
||||
struct grep_opt *grep_opt = opt->value;
|
||||
int from_stdin = !strcmp(arg, "-");
|
||||
FILE *patterns;
|
||||
int lno = 0;
|
||||
struct strbuf sb = STRBUF_INIT;
|
||||
|
||||
patterns = fopen(arg, "r");
|
||||
patterns = from_stdin ? stdin : fopen(arg, "r");
|
||||
if (!patterns)
|
||||
die_errno("cannot open '%s'", arg);
|
||||
while (strbuf_getline(&sb, patterns, '\n') == 0) {
|
||||
@ -677,7 +678,8 @@ static int file_callback(const struct option *opt, const char *arg, int unset)
|
||||
s = strbuf_detach(&sb, &len);
|
||||
append_grep_pat(grep_opt, s, len, arg, ++lno, GREP_PATTERN);
|
||||
}
|
||||
fclose(patterns);
|
||||
if (!from_stdin)
|
||||
fclose(patterns);
|
||||
strbuf_release(&sb);
|
||||
return 0;
|
||||
}
|
||||
|
@ -303,6 +303,11 @@ test_expect_success 'grep -f, ignore empty lines' '
|
||||
test_cmp expected actual
|
||||
'
|
||||
|
||||
test_expect_success 'grep -f, ignore empty lines, read patterns from stdin' '
|
||||
git grep -f - <patterns >actual &&
|
||||
test_cmp expected actual
|
||||
'
|
||||
|
||||
cat >expected <<EOF
|
||||
y:y yy
|
||||
--
|
||||
|
Loading…
Reference in New Issue
Block a user