All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeff King <peff@peff.net>
To: Matheus Tavares <matheus.bernardino@usp.br>
Cc: git@vger.kernel.org, gitster@pobox.com, rhi@pengutronix.de
Subject: Re: [PATCH] describe: output tag's ref instead of embedded name
Date: Sun, 16 Feb 2020 01:51:01 -0500	[thread overview]
Message-ID: <20200216065101.GA2937208@coredump.intra.peff.net> (raw)
In-Reply-To: <fcf19a46b80322c5579142efe4ec681a4dcbdd28.1581802264.git.matheus.bernardino@usp.br>

On Sat, Feb 15, 2020 at 06:34:13PM -0300, Matheus Tavares wrote:

> If a tag describes a commit, we currently output not the tag's ref but
> its embedded name. This means that when the tag is locally stored under
> a different name, the output given cannot be used to access the tag in
> any way. A warning is also emitted in this case, but the message is not
> very enlightening:
> 
> $ git tag -am "testing tag body" testing-tag
> $ mv .git/refs/tags/testing-tag .git/refs/tags/testing-tag-with-new-name
> $ git describe --tags --abbrev=0
> warning: tag 'testing-tag' is really 'testing-tag-with-new-name' here
> testing-tag
> 
> Let's make git-describe output the tag's local name instead and
> rephrase the warning to reflect the situation a little better.

Thanks. I had this on my "eh, we should probably do it before we forget"
pile, so I was quite happy to see that somebody had already handled it. :)

I think the conversion of the die() to warning() makes sense here. Do we
want to cover that with a test?

> Since the embedded name will no longer be needed for correct output, we
> can convert the die() call in append_name() when a tag doesn't have the
> embedded name to a warning(). Also, this function will now have two
> disconnected responsibilities: verifying if the tag's embedded name
> matches the ref and actually appending the ref to a given buffer (which
> does not depend on the parsed tag object itself). Thus, to increase
> intelligibility, let's make the function specialize in the former and do
> the latter outside it.

Pulling the buffer append out of the function makes a lot of sense as
well. I was puzzled at first that this old code:

> -
> -	if (n->tag) {
> -		if (all)
> -			strbuf_addstr(dst, "tags/");
> -		strbuf_addstr(dst, n->tag->tag);
> -	} else {
> -		strbuf_addstr(dst, n->path);
> -	}
>  }

...used "tags/" for "--all", but the new code doesn't:

> @@ -313,7 +305,8 @@ static void describe_commit(struct object_id *oid, struct strbuf *dst)
>  		/*
>  		 * Exact match to an existing ref.
>  		 */
> -		append_name(n, dst);
> +		verify_tag_embedded_name(n);
> +		strbuf_addstr(dst, n->path);

But that makes sense. As the else clause in the old code shows, our
n->path is already set up correctly. So not only are we splitting out
the "append" concern, but we're able to make it simpler. Good.

> diff --git a/t/t6120-describe.sh b/t/t6120-describe.sh
> index 09c50f3f04..d34c091e0b 100755
> --- a/t/t6120-describe.sh
> +++ b/t/t6120-describe.sh
> @@ -129,9 +129,9 @@ test_expect_success 'rename tag A to Q locally' '
>  	mv .git/refs/tags/A .git/refs/tags/Q
>  '
>  cat - >err.expect <<EOF
> -warning: tag 'A' is really 'Q' here
> +warning: tag 'Q' is externally known as 'A'
>  EOF
> -check_describe A-* HEAD
> +check_describe Q-* HEAD
>  test_expect_success 'warning was displayed for Q' '
>  	test_i18ncmp err.expect err.actual

And this test change makes sense. I had to look up how check_describe
works, but that first argument is the expected output.

So the whole thing looks good to me, with or without the die/warning
test I mentioned above.

-Peff

  reply	other threads:[~2020-02-16  6:51 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-05 14:13 git-describe --tags warning: 'X' is really 'Y' here Roland Hieber
2020-02-05 17:15 ` Matheus Tavares Bernardino
2020-02-14  6:53   ` Jeff King
2020-02-14 16:57     ` Junio C Hamano
2020-02-15 21:34       ` [PATCH] describe: output tag's ref instead of embedded name Matheus Tavares
2020-02-16  6:51         ` Jeff King [this message]
2020-02-18 19:31           ` Junio C Hamano
2020-02-18 19:54             ` Jeff King
2020-02-18 23:05               ` Junio C Hamano
2020-02-18 23:28                 ` Junio C Hamano
2020-02-19  1:57                   ` Jeff King
2020-02-19  3:22                     ` Junio C Hamano
2020-02-19  3:56                       ` Jeff King
2020-02-19 11:14                         ` Junio C Hamano
2020-02-20 11:25                           ` Jeff King
2020-02-20 17:34                             ` Junio C Hamano
2020-02-20 22:19                               ` Matheus Tavares Bernardino
2020-02-20 22:59                                 ` Junio C Hamano
2020-02-21  1:33                                   ` Matheus Tavares
2020-02-21  2:05                                     ` Junio C Hamano
2020-02-21  6:00                                       ` Jeff King
2020-02-21  5:58                               ` Jeff King
2020-02-19 10:08                       ` Roland Hieber

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=20200216065101.GA2937208@coredump.intra.peff.net \
    --to=peff@peff.net \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=matheus.bernardino@usp.br \
    --cc=rhi@pengutronix.de \
    /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.