diff options
author | René Scharfe <rene.scharfe@lsrfire.ath.cx> | 2011-06-05 17:24:25 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-06-05 18:15:26 -0700 |
commit | a8f0e7649eba3ce78e1f09fc4dcbb2c3fcc3d866 (patch) | |
tree | 5076f16de30d3761802d5dfa241054662fb5b8c7 | |
parent | 08303c3636ef750bfafd1c47f363120cb439b367 (diff) | |
download | git-a8f0e7649eba3ce78e1f09fc4dcbb2c3fcc3d866.tar.gz |
grep: add --break
With --break, an empty line is printed between matches from different
files, increasing readability. This option is taken from ack
(http://betterthangrep.com/).
Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | Documentation/git-grep.txt | 3 | ||||
-rw-r--r-- | builtin/grep.c | 4 | ||||
-rw-r--r-- | grep.c | 7 | ||||
-rw-r--r-- | grep.h | 1 | ||||
-rwxr-xr-x | t/t7810-grep.sh | 28 |
5 files changed, 40 insertions, 3 deletions
diff --git a/Documentation/git-grep.txt b/Documentation/git-grep.txt index e150c77cff..dea7cad0c2 100644 --- a/Documentation/git-grep.txt +++ b/Documentation/git-grep.txt @@ -148,6 +148,9 @@ OPTIONS gives the default to color output. Same as `--color=never`. +--break:: + Print an empty line between matches from different files. + -[ABC] <context>:: Show `context` trailing (`A` -- after), or leading (`B` -- before), or both (`C` -- context) lines, and place a diff --git a/builtin/grep.c b/builtin/grep.c index 0d5a90b94b..42bb87f544 100644 --- a/builtin/grep.c +++ b/builtin/grep.c @@ -822,6 +822,8 @@ int cmd_grep(int argc, const char **argv, const char *prefix) OPT_BOOLEAN('c', "count", &opt.count, "show the number of matches instead of matching lines"), OPT__COLOR(&opt.color, "highlight matches"), + OPT_BOOLEAN(0, "break", &opt.file_break, + "print empty line between matches from different files"), OPT_GROUP(""), OPT_CALLBACK('C', NULL, &opt, "n", "show <n> context lines before and after matches", @@ -976,7 +978,7 @@ int cmd_grep(int argc, const char **argv, const char *prefix) use_threads = 0; if (use_threads) { - if (opt.pre_context || opt.post_context) + if (opt.pre_context || opt.post_context || opt.file_break) skip_first_line = 1; start_threads(&opt); } @@ -721,7 +721,10 @@ static void show_line(struct grep_opt *opt, char *bol, char *eol, int rest = eol - bol; char *line_color = NULL; - if (opt->pre_context || opt->post_context) { + if (opt->file_break && opt->last_shown == 0) { + if (opt->show_hunk_mark) + opt->output(opt, "\n", 1); + } else if (opt->pre_context || opt->post_context) { if (opt->last_shown == 0) { if (opt->show_hunk_mark) { output_color(opt, "--", 2, opt->color_sep); @@ -941,7 +944,7 @@ static int grep_buffer_1(struct grep_opt *opt, const char *name, if (!opt->output) opt->output = std_output; - if (opt->pre_context || opt->post_context) { + if (opt->pre_context || opt->post_context || opt->file_break) { /* Show hunk marks, except for the first file. */ if (opt->last_shown) opt->show_hunk_mark = 1; @@ -110,6 +110,7 @@ struct grep_opt { unsigned post_context; unsigned last_shown; int show_hunk_mark; + int file_break; void *priv; void (*output)(struct grep_opt *opt, const void *data, size_t size); diff --git a/t/t7810-grep.sh b/t/t7810-grep.sh index 539a8fe6e9..f55793e3cb 100755 --- a/t/t7810-grep.sh +++ b/t/t7810-grep.sh @@ -746,4 +746,32 @@ test_expect_success 'grep --color, separator' ' test_cmp expected actual ' +cat >expected <<EOF +hello.c:int main(int argc, const char **argv) +hello.c: /* char ?? */ + +hello_world:Hello_world +EOF + +test_expect_success 'grep --break' ' + git grep --break -e char -e lo_w hello.c hello_world >actual && + test_cmp expected actual +' + +cat >expected <<EOF +hello.c:int main(int argc, const char **argv) +hello.c-{ +-- +hello.c: /* char ?? */ +hello.c-} + +hello_world:Hello_world +hello_world-HeLLo_world +EOF + +test_expect_success 'grep --break with context' ' + git grep --break -A1 -e char -e lo_w hello.c hello_world >actual && + test_cmp expected actual +' + test_done |