From: John Keeping <john@keeping.me.uk>
To: Gianni Ceccarelli <dakkar@thenautilus.net>
Cc: cgit@lists.zx2c4.com
Subject: Re: [PATCH] Handle tags outside of refs/tags gracefully.
Date: Tue, 5 Jan 2021 13:09:47 +0000 [thread overview]
Message-ID: <X/RlG6x+34Cva+oj@john.keeping.me.uk> (raw)
In-Reply-To: <20210105115303.2cc704f9@nautilus>
On Tue, Jan 05, 2021 at 11:53:03AM +0000, Gianni Ceccarelli wrote:
> I have found an annoying case…
>
> In the repository created as per my previous message, I did::
>
> $ git tag -a foo
> $ git rev-parse refs/tags/foo > .git/refs/weird/annotated
> $ git push origin refs/weird/*:refs/weird/*
>
> This creates an "annotated tag", which is an object in the store, not
> just a reference.
>
> Now CGit shows the ``refs/weird/annotated`` as a tag in
> https://www.thenautilus.net/cgit/example/ and several other views, but
> following that link goes to
> https://www.thenautilus.net/cgit/example/tag/?h=refs/weird/annotated
> which says "bad tag reference"
>
> I hope you'll concur this is not the best behaviour.
>
> I see several ways to "fix" this:
>
> * in all the various views, don't show links to annotated tags whose
> ref is outside of ``refs/tags/``
> * in ``/tag``, try ``refs/tags/$h`` first, and if that doesn't work,
> try ``$h``, and show that only if it's an annotated tag (not just a
> reference)
> * create another endpoint (``/atag``?) to show tag objects, and link
> to that one for annotated tags whose ref is outside of
> ``refs/tags/``
I think something like option 2 is the right answer here, since that
brings us closer to Git's behaviour. Does the patch below help?
-- >8 --
Subject: [PATCH] ui-tag: accept tags not under refs/tags/
In log views, we decorate commits with tags under any ref hierarchy,
which generates links to ui-tag with, for example, refs/weird/tag. By
forcing a refs/tags/ prefix onto this, a 404 not found error is
guaranteed.
Taking inspiration from Git's ref_rev_parse_rules, let's try to resolve
the given tag name raw and relative to refs/ before trying refs/tags/.
Reported-by: Gianni Ceccarelli <dakkar@thenautilus.net>
Signed-off-by: John Keeping <john@metanate.com>
---
ui-tag.c | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/ui-tag.c b/ui-tag.c
index 846d5b1..c1f81d1 100644
--- a/ui-tag.c
+++ b/ui-tag.c
@@ -38,17 +38,32 @@ static void print_download_links(char *revname)
html("</td></tr>");
}
+static const char *tag_patterns[] = {
+ "%s",
+ "refs/%s",
+ "refs/tags/%s",
+ NULL
+};
+
void cgit_print_tag(char *revname)
{
struct strbuf fullref = STRBUF_INIT;
struct object_id oid;
struct object *obj;
+ const char **pattern;
if (!revname)
revname = ctx.qry.head;
- strbuf_addf(&fullref, "refs/tags/%s", revname);
- if (get_oid(fullref.buf, &oid)) {
+ for (pattern = tag_patterns; *pattern; pattern++) {
+ strbuf_reset(&fullref);
+ strbuf_addf(&fullref, *pattern, revname);
+
+ if (!get_oid(fullref.buf, &oid))
+ break;
+ }
+
+ if (!*pattern) {
cgit_print_error_page(404, "Not found",
"Bad tag reference: %s", revname);
goto cleanup;
--
2.30.0
next prev parent reply other threads:[~2021-01-05 13:10 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-28 13:35 Ulrich Spörlein
2020-12-29 11:37 ` Jason A. Donenfeld
2020-12-29 18:22 ` Ulrich Spörlein
2020-12-29 20:04 ` Jason A. Donenfeld
2020-12-29 20:33 ` Gianni Ceccarelli
2021-01-05 11:53 ` Gianni Ceccarelli
2021-01-05 13:09 ` John Keeping [this message]
2021-01-05 13:40 ` Gianni Ceccarelli
[not found] ` <CAJ9axoSnfttirTwaVNhZPa73KSw+PCTq_5MVyvUfT7AcDxLXPg@mail.gmail.com>
2021-01-05 17:12 ` Gianni Ceccarelli
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=X/RlG6x+34Cva+oj@john.keeping.me.uk \
--to=john@keeping.me.uk \
--cc=cgit@lists.zx2c4.com \
--cc=dakkar@thenautilus.net \
/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 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 NNTP newsgroup(s).