Hi Philippe, On Sun, 26 Jan 2020, Philippe Blain via GitGitGadget wrote: > From: Philippe Blain <levraiphilippeblain@xxxxxxxxx> > > Since grep learned to recurse into submodules in 0281e487fd > (grep: optionally recurse into submodules, 2016-12-16), > using --recurse-submodules along with --no-index makes Git > die(). > > This is unfortunate because if submodule.recurse is set in a user's > ~/.gitconfig, invoking `git grep --no-index` either inside or outside > a Git repository results in > > fatal: option not supported with --recurse-submodules > > Let's allow using these options together, so that setting submodule.recurse > globally does not prevent using `git grep --no-index`. > > Using `--recurse-submodules` should not have any effect if `--no-index` > is used inside a repository, as Git will recurse into the checked out > submodule directories just like into regular directories. > > Signed-off-by: Philippe Blain <levraiphilippeblain@xxxxxxxxx> My initial reaction to this patch was: "but why would you try to combine `--recurse-submodules` with `--no-index`?". The `submodule.recurse` reference made me think again, though. And then it hit me: by `--no-index`, what we _really_ mean to say is: ignore that this _might_ be tracked in Git. And that obviously means that there cannot be any submodules to recurse into, as far as `git diff --no-index` is concerned. So I think your patch makes a ton of sense. Thanks, Dscho > --- > grep: ignore --recurse-submodules if --no-index is given > > Since grep learned to recurse into submodules in 0281e487fd (grep: > optionally recurse into submodules, 2016-12-16), using > --recurse-submodules along with --no-index makes Git die(). > > This is unfortunate because if submodule.recurse is set in a user's > ~/.gitconfig, invoking git grep --no-index either inside or outside a > Git repository results in > > fatal: option not supported with --recurse-submodules > > Let's allow using these options together, so that setting > submodule.recurse globally does not prevent using git grep --no-index. > > Using --recurse-submodules should not have any effect if --no-indexis > used inside a repository, as Git will recurse into the checked out > submodule directories just like into regular directories. > > Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-540%2Fphil-blain%2Fgrep-no-index-ignore-recurse-submodule-v1 > Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-540/phil-blain/grep-no-index-ignore-recurse-submodule-v1 > Pull-Request: https://github.com/gitgitgadget/git/pull/540 > > Documentation/git-grep.txt | 3 ++- > builtin/grep.c | 4 ++-- > t/t7814-grep-recurse-submodules.sh | 11 ++++++++++- > 3 files changed, 14 insertions(+), 4 deletions(-) > > diff --git a/Documentation/git-grep.txt b/Documentation/git-grep.txt > index c89fb569e3..ffc3a6efdc 100644 > --- a/Documentation/git-grep.txt > +++ b/Documentation/git-grep.txt > @@ -96,7 +96,8 @@ OPTIONS > Recursively search in each submodule that has been initialized and > checked out in the repository. When used in combination with the > <tree> option the prefix of all submodule output will be the name of > - the parent project's <tree> object. > + the parent project's <tree> object. This option has no effect > + if `--no-index` is given. > > -a:: > --text:: > diff --git a/builtin/grep.c b/builtin/grep.c > index 50ce8d9461..d5f089dd41 100644 > --- a/builtin/grep.c > +++ b/builtin/grep.c > @@ -1115,8 +1115,8 @@ int cmd_grep(int argc, const char **argv, const char *prefix) > } > } > > - if (recurse_submodules && (!use_index || untracked)) > - die(_("option not supported with --recurse-submodules")); > + if (recurse_submodules && untracked) > + die(_("--untracked not supported with --recurse-submodules")); > > if (!show_in_pager && !opt.status_only) > setup_pager(); > diff --git a/t/t7814-grep-recurse-submodules.sh b/t/t7814-grep-recurse-submodules.sh > index 946f91fa57..828cb3ba58 100755 > --- a/t/t7814-grep-recurse-submodules.sh > +++ b/t/t7814-grep-recurse-submodules.sh > @@ -345,7 +345,16 @@ test_incompatible_with_recurse_submodules () > } > > test_incompatible_with_recurse_submodules --untracked > -test_incompatible_with_recurse_submodules --no-index > + > +test_expect_success 'grep --recurse-submodules --no-index ignores --recurse-submodules' ' > + git grep --recurse-submodules --no-index -e "^(.|.)[\d]" >actual && > + cat >expect <<-\EOF && > + a:(1|2)d(3|4) > + submodule/a:(1|2)d(3|4) > + submodule/sub/a:(1|2)d(3|4) > + EOF > + test_cmp expect actual > +' > > test_expect_success 'grep --recurse-submodules should pass the pattern type along' ' > # Fixed > > base-commit: bc7a3d4dc04dd719e7c8c35ebd7a6e6651c5c5b6 > -- > gitgitgadget >