Re: [PATCH 5/6] grep: turn off gitlink detection for --no-index

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Jeff King <peff@xxxxxxxx> writes:

> If we are running "git grep --no-index" outside of a git
> repository, we behave roughly like "grep -r", examining all
> files in the current directory and its subdirectories.
> However, because we use fill_directory() to do the
> recursion, it will skip over any directories which look like
> sub-repositories.
>
> For a normal git operation (like "git grep" in a repository)
> this makes sense; we do not want to cross the boundary out
> of our current repository into a submodule. But for
> "--no-index" without a repository, we should look at all
> files, including embedded repositories.
>
> There is one exception, though: we probably should _not_
> descend into ".git" directories. Doing so is inefficient and
> unlikely to turn up useful hits.
>
> This patch drops our use of dir.c's gitlink-detection, but
> we do still avoid ".git". That makes us more like tools such
> as "ack" or "ag", which also know to avoid cruft in .git.
>
> As a bonus, this also drops our usage of the ref code
> when we are outside of a repository, making the transition
> to pluggable ref backends cleaner.
>
> Based-on-a-patch-by: David Turner <dturner@xxxxxxxxxxxxxxxx>
> Signed-off-by: Jeff King <peff@xxxxxxxx>
> ---
> I hope the reasoning above makes sense. My ulterior motive is the
> "bonus", but I really think the new behavior is what people would expect
> (i.e., that "git grep --no-index" is basically a replacement for "ack",
> etc).

I agree with --no-index part, but the caller of grep_directory() is
"either no-index, or untracked".  I am not sure if the latter wants
this new behaviour.

>
>  builtin/grep.c  |  1 +
>  t/t7810-grep.sh | 27 +++++++++++++++++++++++++++
>  2 files changed, 28 insertions(+)
>
> diff --git a/builtin/grep.c b/builtin/grep.c
> index aa7435f..0636cd7 100644
> --- a/builtin/grep.c
> +++ b/builtin/grep.c
> @@ -528,6 +528,7 @@ static int grep_directory(struct grep_opt *opt, const struct pathspec *pathspec,
>  	int i, hit = 0;
>  
>  	memset(&dir, 0, sizeof(dir));
> +	dir.flags |= DIR_NO_GITLINKS;
>  	if (exc_std)
>  		setup_standard_excludes(&dir);
>  
> diff --git a/t/t7810-grep.sh b/t/t7810-grep.sh
> index b540944..1e72971 100755
> --- a/t/t7810-grep.sh
> +++ b/t/t7810-grep.sh
> @@ -905,6 +905,33 @@ test_expect_success 'inside git repository but with --no-index' '
>  	)
>  '
>  
> +test_expect_success 'grep --no-index descends into repos, but not .git' '
> +	rm -fr non &&
> +	mkdir -p non/git &&
> +	(
> +		GIT_CEILING_DIRECTORIES="$(pwd)/non" &&
> +		export GIT_CEILING_DIRECTORIES &&
> +		cd non/git &&
> +
> +		echo magic >file &&
> +		git init repo &&
> +		(
> +			cd repo &&
> +			echo magic >file &&
> +			git add file &&
> +			git commit -m foo &&
> +			echo magic >.git/file
> +		) &&
> +
> +		cat >expect <<-\EOF &&
> +		file
> +		repo/file
> +		EOF
> +		git grep -l --no-index magic >actual &&
> +		test_cmp expect actual
> +	)
> +'
> +
>  test_expect_success 'setup double-dash tests' '
>  cat >double-dash <<EOF &&
>  --
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]