зеркало из https://github.com/microsoft/git.git
grep -O: allow optional argument specifying the pager (or editor)
Suppose you want to edit all files that contain a specific search term. Of course, you can do something totally trivial such as git grep -z -e <term> | xargs -0r vi +/<term> but maybe you are happy that the same will be achieved by git grep -Ovi <term> now. [jn: rebased and added tests] Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Acked-by: Paolo Bonzini <bonzini@gnu.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
678e484b7d
Коммит
0af88c15e2
|
@ -14,7 +14,7 @@ SYNOPSIS
|
|||
[-E | --extended-regexp] [-G | --basic-regexp]
|
||||
[-F | --fixed-strings] [-n]
|
||||
[-l | --files-with-matches] [-L | --files-without-match]
|
||||
[-O | --open-files-in-pager]
|
||||
[(-O | --open-files-in-pager) [<pager>]]
|
||||
[-z | --null]
|
||||
[-c | --count] [--all-match] [-q | --quiet]
|
||||
[--max-depth <depth>]
|
||||
|
@ -105,8 +105,8 @@ OPTIONS
|
|||
For better compatibility with 'git diff', `--name-only` is a
|
||||
synonym for `--files-with-matches`.
|
||||
|
||||
-O::
|
||||
--open-files-in-pager::
|
||||
-O [<pager>]::
|
||||
--open-files-in-pager [<pager>]::
|
||||
Open the matching files in the pager (not the output of 'grep').
|
||||
If the pager happens to be "less" or "vi", and the user
|
||||
specified only one pattern, the first file is positioned at
|
||||
|
|
|
@ -828,7 +828,7 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
|
|||
int cached = 0;
|
||||
int seen_dashdash = 0;
|
||||
int external_grep_allowed__ignored;
|
||||
int show_in_pager = 0;
|
||||
const char *show_in_pager = NULL, *default_pager = "dummy";
|
||||
struct grep_opt opt;
|
||||
struct object_array list = { 0, 0, NULL };
|
||||
const char **paths = NULL;
|
||||
|
@ -916,8 +916,9 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
|
|||
OPT_BOOLEAN(0, "all-match", &opt.all_match,
|
||||
"show only matches from files that match all patterns"),
|
||||
OPT_GROUP(""),
|
||||
OPT_BOOLEAN('O', "open-files-in-pager", &show_in_pager,
|
||||
"show matching files in the pager"),
|
||||
{ OPTION_STRING, 'O', "open-files-in-pager", &show_in_pager,
|
||||
"pager", "show matching files in the pager",
|
||||
PARSE_OPT_OPTARG, NULL, (intptr_t)default_pager },
|
||||
OPT_BOOLEAN(0, "ext-grep", &external_grep_allowed__ignored,
|
||||
"allow calling of grep(1) (ignored by this build)"),
|
||||
{ OPTION_CALLBACK, 0, "help-all", &options, NULL, "show usage",
|
||||
|
@ -993,19 +994,16 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
|
|||
argc--;
|
||||
}
|
||||
|
||||
if (show_in_pager == default_pager)
|
||||
show_in_pager = git_pager(1);
|
||||
if (show_in_pager) {
|
||||
const char *pager = git_pager(1);
|
||||
if (!pager) {
|
||||
show_in_pager = 0;
|
||||
} else {
|
||||
opt.name_only = 1;
|
||||
opt.null_following_name = 1;
|
||||
opt.output_priv = &path_list;
|
||||
opt.output = append_path;
|
||||
string_list_append(pager, &path_list);
|
||||
string_list_append(show_in_pager, &path_list);
|
||||
use_threads = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (!opt.pattern_list)
|
||||
die("no pattern given.");
|
||||
|
|
|
@ -99,7 +99,11 @@ test_expect_success 'git grep -O jumps to line in less' '
|
|||
|
||||
GIT_PAGER=./less git grep -O GREP_PATTERN >out &&
|
||||
test_cmp expect actual &&
|
||||
test_cmp empty out
|
||||
test_cmp empty out &&
|
||||
|
||||
git grep -O./less GREP_PATTERN >out2 &&
|
||||
test_cmp expect actual &&
|
||||
test_cmp empty out2
|
||||
'
|
||||
|
||||
test_expect_success 'modified file' '
|
||||
|
@ -135,8 +139,7 @@ test_expect_success 'run from subdir' '
|
|||
export GIT_PAGER &&
|
||||
GIT_PAGER='\''printf "%s\n" >../args'\'' &&
|
||||
git grep -O "enum grep_pat_token" >../out &&
|
||||
GIT_PAGER="pwd >../dir; :" &&
|
||||
git grep -O "enum grep_pat_token" >../out2
|
||||
git grep -O"pwd >../dir; :" "enum grep_pat_token" >../out2
|
||||
) &&
|
||||
case $(cat dir) in
|
||||
*subdir)
|
||||
|
|
Загрузка…
Ссылка в новой задаче