All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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.