diff options
authorBryce Kwon <bryce@brycekwon.com>
committerBryce Kwon <bryce@brycekwon.com>
commit
parent
tree
download
Offer tag snapshots only for a tagged commit
The tag page offered a download for a tag of a tree or a blob, which only led to a "Not a commit" page. The refs listing already checks.
-rw-r--r--source/ui-tag.c14
-rwxr-xr-xtests/t0113-tag.sh14
2 files changed, 23 insertions, 5 deletions
diff --git a/source/ui-tag.c b/source/ui-tag.c
index 559cb54..5fa8a17 100644
--- a/source/ui-tag.c
+++ b/source/ui-tag.c
@@ -57,8 +57,14 @@ static void print_object_row(struct object *obj)
html("</td></tr>\n");
}
-static void print_download_row(const char *revname)
+/*
+ * A snapshot is cut from a commit, so a tag of anything else offers none, as in
+ * the refs listing.
+ */
+static void print_download_row(const char *revname, const struct object *obj)
{
+ if (!ctx.repo->snapshots || obj->type != OBJ_COMMIT)
+ return;
html("<tr><th scope='row'>download</th><td class='oid'>");
cgit_print_snapshot_links(ctx.repo, revname, "<br>");
html("</td></tr>\n");
@@ -111,8 +117,7 @@ static void print_annotated_tag(const char *revname, const struct object_id *oid
if (info->tagger)
print_tagger_row(info);
print_object_row(tag->tagged);
- if (ctx.repo->snapshots)
- print_download_row(revname);
+ print_download_row(revname, tag->tagged);
html("</table>\n");
print_message(info->msg);
cgit_print_layout_end();
@@ -125,8 +130,7 @@ static void print_lightweight_tag(const char *revname, struct object *obj)
html("<table class='commit-info'>\n");
print_name_row(revname, NULL);
print_object_row(obj);
- if (ctx.repo->snapshots)
- print_download_row(revname);
+ print_download_row(revname, obj);
html("</table>\n");
cgit_print_layout_end();
}
diff --git a/tests/t0113-tag.sh b/tests/t0113-tag.sh
index 2c9dc25..ff50f90 100755
--- a/tests/t0113-tag.sh
+++ b/tests/t0113-tag.sh
@@ -45,4 +45,18 @@ test_expect_success 'a lightweight tag gets the shorter table' '
! grep "<th scope=.row.>tagged by</th>" tmp
'
+# A snapshot is cut from a commit, so a tag of a tree or a blob offers none.
+test_expect_success 'a tag of anything but a commit offers no download' '
+ git -C repos/foo tag -a -m "a tree" tree-tag HEAD^{tree} &&
+ git -C repos/foo tag blob-tag HEAD:file-1 &&
+ cgit_url "foo/tag/&h=tree-tag" >tmp &&
+ grep "tagged object" tmp &&
+ ! grep ">download<" tmp &&
+ cgit_url "foo/tag/&h=blob-tag" >tmp &&
+ grep "tagged object" tmp &&
+ ! grep ">download<" tmp &&
+ cgit_url "foo/tag/&h=v1.0" >tmp &&
+ grep ">download<" tmp
+'
+
test_done