git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: "Rubén Justo" <rjusto@gmail.com>
Cc: Git List <git@vger.kernel.org>
Subject: Re: [PATCH 3/3] add: use advise_if_enabled for ADVICE_ADD_EMBEDDED_REPO
Date: Fri, 29 Mar 2024 10:55:56 -0700	[thread overview]
Message-ID: <xmqqcyrczzv7.fsf@gitster.g> (raw)
In-Reply-To: <0e38da05-efd6-451e-bd8a-b2b3457c0c75@gmail.com> ("Rubén Justo"'s message of "Fri, 29 Mar 2024 05:19:43 +0100")

Rubén Justo <rjusto@gmail.com> writes:

> Use the newer advise_if_enabled() machinery to show the advice.

Common to the other two patches, but "Newer" is not a good enough
excuse if the existing code is working well for us and not being
maintenance burden.  The previous two patches were helped by use of
advise_if_enabled() in a concrete way (or perhaps two ways), and
that should be explained when selling them.

This one also needs a similar justification, but with a twist.

> We don't have a test for this.  Add one.
>
> Signed-off-by: Rubén Justo <rjusto@gmail.com>
> ---
>  builtin/add.c  |  6 +++---
>  t/t3700-add.sh | 32 ++++++++++++++++++++++++++++++++
>  2 files changed, 35 insertions(+), 3 deletions(-)
>
> diff --git a/builtin/add.c b/builtin/add.c
> index 289adaaecf..e97699d6b9 100644
> --- a/builtin/add.c
> +++ b/builtin/add.c
> @@ -310,9 +310,9 @@ static void check_embedded_repo(const char *path)
>  	strbuf_strip_suffix(&name, "/");
>  
>  	warning(_("adding embedded git repository: %s"), name.buf);
> -	if (!adviced_on_embedded_repo &&
> -	    advice_enabled(ADVICE_ADD_EMBEDDED_REPO)) {
> -		advise(embedded_advice, name.buf, name.buf);
> +	if (!adviced_on_embedded_repo) {
> +		advise_if_enabled(ADVICE_ADD_EMBEDDED_REPO,
> +				  embedded_advice, name.buf, name.buf);
>  		adviced_on_embedded_repo = 1;
>  	}

This uses a static variable "adviced_on_embedded_repo" to skip
giving the advice messages over and over.  The patch preserves
that feature of this code while updating it to use the "if_enabled"
variant.

> diff --git a/t/t3700-add.sh b/t/t3700-add.sh
> index 681081e0d5..2b92f3eb5b 100755
> --- a/t/t3700-add.sh
> +++ b/t/t3700-add.sh
> @@ -349,6 +349,38 @@ test_expect_success '"git add ." in empty repo' '
>  	)
>  '
>  
> +test_expect_success '"git add" a nested repository' '

"nested" -> "embedded", as the warning, advice_type and the message
contents all use "embedded" consistently.

> +	rm -fr empty &&
> +	git init empty &&
> +	(
> +		cd empty &&
> +		git init empty &&
> +		(
> +			cd empty &&
> +			git commit --allow-empty -m "foo"
> +		) &&
> +		git add empty 2>actual &&

It is very good to add a test for a feature that we failed to cover
so far.  But the feature, as we seen above, is twofold.  We see an
advice, and we it see only once even when we have multiple.

So we should add two such embedded repositories for the test, no?
Also, the shell repository is not meant to stay empty as the user
will make a mistaken attempt to "add" something to it.

Perhaps the above part would become more like:

	rm -rf outer && git init outer &&
	(
		cd outer &&
		for i in 1 2
		do
			name=inner$i &&
			git init $name &&
                        git -C $name --allow-empty -m $name ||
				return 1
		done &&
                git add . 2>actual &&

to use a more descriptive name that shows the point of the test (it
is not interesting that they are empty---they are in "outer contains
innner repositories" relationship and that is what the test wants to
make), and ensure "only once" part of the feature we are testing.

> +		cat >expect <<-EOF &&
> +		warning: adding embedded git repository: empty
> +		hint: You${SQ}ve added another git repository inside your current repository.
> +		hint: Clones of the outer repository will not contain the contents of
> +		hint: the embedded repository and will not know how to obtain it.
> +		hint: If you meant to add a submodule, use:
> +		hint: 
> +		hint: 	git submodule add <url> empty
> +		hint: 
> +		hint: If you added this path by mistake, you can remove it from the
> +		hint: index with:
> +		hint: 
> +		hint: 	git rm --cached empty
> +		hint: 
> +		hint: See "git help submodule" for more information.
> +		hint: Disable this message with "git config advice.addEmbeddedRepo false"
> +		EOF
> +		test_cmp expect actual
> +	)
> +'
> +
>  test_expect_success 'error on a repository with no commits' '
>  	rm -fr empty &&
>  	git init empty &&


  reply	other threads:[~2024-03-29 17:56 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-29  4:14 [PATCH 0/3] add: use advise_if_enabled Rubén Justo
2024-03-29  4:19 ` [PATCH 1/3] add: use advise_if_enabled for ADVICE_ADD_IGNORED_FILE Rubén Justo
2024-03-29 17:40   ` Junio C Hamano
2024-03-29  4:19 ` [PATCH 2/3] add: use advise_if_enabled for ADVICE_ADD_EMPTY_PATHSPEC Rubén Justo
2024-03-29  4:19 ` [PATCH 3/3] add: use advise_if_enabled for ADVICE_ADD_EMBEDDED_REPO Rubén Justo
2024-03-29 17:55   ` Junio C Hamano [this message]
2024-03-29 19:04     ` Rubén Justo
2024-03-29 19:31       ` Junio C Hamano
2024-03-29 19:59         ` Rubén Justo
2024-03-29 20:59           ` Junio C Hamano
2024-03-30 13:35         ` Rubén Justo
2024-03-29 17:28 ` [PATCH 0/3] add: use advise_if_enabled Junio C Hamano
2024-03-29 19:16   ` Rubén Justo
2024-03-30 14:00 ` [PATCH v2 " Rubén Justo
2024-03-30 14:07   ` [PATCH v2 1/3] add: use advise_if_enabled for ADVICE_ADD_IGNORED_FILE Rubén Justo
2024-03-30 14:08   ` [PATCH v2 2/3] add: use advise_if_enabled for ADVICE_ADD_EMPTY_PATHSPEC Rubén Justo
2024-03-30 14:09   ` [PATCH v2 3/3] add: use advise_if_enabled for ADVICE_ADD_EMBEDDED_REPO Rubén Justo

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

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=xmqqcyrczzv7.fsf@gitster.g \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=rjusto@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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).