From: "Philippe Blain via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: "Brandon Williams" <bmwill@google.com>,
"SZEDER Gábor" <szeder.dev@gmail.com>,
"Junio C Hamano" <gitster@pobox.com>,
"Matheus Tavares Bernardino" <matheus.bernardino@usp.br>,
"Philippe Blain" <levraiphilippeblain@gmail.com>,
"Philippe Blain" <levraiphilippeblain@gmail.com>
Subject: [PATCH v2] grep: ignore --recurse-submodules if --no-index is given
Date: Thu, 30 Jan 2020 13:37:28 +0000 [thread overview]
Message-ID: <pull.540.v2.git.1580391448318.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.540.git.1580000298097.gitgitgadget@gmail.com>
From: Philippe Blain <levraiphilippeblain@gmail.com>
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.
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Philippe Blain <levraiphilippeblain@gmail.com>
---
grep: ignore --recurse-submodules if --no-index is given
Changes since v1:
* set recurse_submodules to 0 early in cmd_grep if !use_index. This
makes more sense, and eliminates an incompatibility with topic
mt/threaded-grep-in-object-store.
v1: 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-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-540/phil-blain/grep-no-index-ignore-recurse-submodule-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/540
Range-diff vs v1:
1: 6634266b01 ! 1: 6fc8bf788a grep: ignore --recurse-submodules if --no-index is given
@@ -20,6 +20,7 @@
is used inside a repository, as Git will recurse into the checked out
submodule directories just like into regular directories.
+ Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Philippe Blain <levraiphilippeblain@gmail.com>
diff --git a/Documentation/git-grep.txt b/Documentation/git-grep.txt
@@ -39,6 +40,16 @@
diff --git a/builtin/grep.c b/builtin/grep.c
--- a/builtin/grep.c
+++ b/builtin/grep.c
+@@
+ /* die the same way as if we did it at the beginning */
+ setup_git_directory();
+ }
++ /* Ignore --recurse-submodules if --no-index is given or implied */
++ if (!use_index)
++ recurse_submodules = 0;
+
+ /*
+ * skip a -- separator; we know it cannot be
@@
}
}
Documentation/git-grep.txt | 3 ++-
builtin/grep.c | 7 +++++--
t/t7814-grep-recurse-submodules.sh | 11 ++++++++++-
3 files changed, 17 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..ae2d5bbafc 100644
--- a/builtin/grep.c
+++ b/builtin/grep.c
@@ -958,6 +958,9 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
/* die the same way as if we did it at the beginning */
setup_git_directory();
}
+ /* Ignore --recurse-submodules if --no-index is given or implied */
+ if (!use_index)
+ recurse_submodules = 0;
/*
* skip a -- separator; we know it cannot be
@@ -1115,8 +1118,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
next prev parent reply other threads:[~2020-01-30 13:37 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-26 0:58 [PATCH] grep: ignore --recurse-submodules if --no-index is given Philippe Blain via GitGitGadget
2020-01-26 9:39 ` Johannes Schindelin
2020-01-30 13:37 ` Philippe Blain via GitGitGadget [this message]
2020-01-30 18:14 ` [PATCH v2] " Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.540.v2.git.1580391448318.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=bmwill@google.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=levraiphilippeblain@gmail.com \
--cc=matheus.bernardino@usp.br \
--cc=szeder.dev@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.