[PATCH] Handle tags outside of refs/tags gracefully.

Gianni Ceccarelli dakkar at thenautilus.net
Tue Jan 5 13:40:10 UTC 2021

On 2021-01-05 John Keeping <john at keeping.me.uk> wrote:
> I think something like option 2 is the right answer here, since that
> brings us closer to Git's behaviour.

``git tag`` never looks anywhere but under ``refs/tags/``. Not even
``git tag --contains`` will show annotated tags that are only
referenced outside that path.

OTOH (on my example repo)::

  $ git show HEAD
  commit 4081ad6720f3f60f5f11a77f1d932517496e33ba (HEAD -> master, refs/weird/thing, tag: refs/weird/annotated, tag: foo, origin/master, origin/HEAD)
  Author: dakkar <dakkar at thenautilus.net>
  Date:   2020-12-29 20:10:18 +0000


  $ git tag -v refs/weird/annotated
  error: tag 'refs/weird/annotated' not found.

So maybe CGit is already behaving very closely to git.
> Does the patch below help?
> [snip]
> +static const char *tag_patterns[] = {
> +	"%s",
> +	"refs/%s",
> +	"refs/tags/%s",
> +	NULL
> +};

I feel like those strings should be in the reverse order: we've been
asked to show a tag, let's try to resolve the ref as an actual tag
before guessing.

	Dakkar - <Mobilis in mobile>
	GPG public key fingerprint = A071 E618 DD2C 5901 9574
	                             6FE2 40EA 9883 7519 3F88
	                    key id = 0x75193F88

More information about the CGit mailing list