From 9f48df63f6d8d9a8abcc02cd2f08293da7081520 Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Fri, 11 May 2007 23:44:42 +0200 Subject: Add links to enable downloading of tagged blobs All tags below refs/archives are shown on the repo summary page as download links. The links referes to the tagged objects, using the tag name as filename for download. This can be used to add shortcuts for release tarballs, documentation and other blobs stored in the object database, especially blobs that are not reachable during cloning. Signed-off-by: Lars Hjemli --- cgit.css | 20 ++++++++++++++++ ui-summary.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 85 insertions(+), 9 deletions(-) diff --git a/cgit.css b/cgit.css index ef4bc62..49cf2d1 100644 --- a/cgit.css +++ b/cgit.css @@ -10,6 +10,7 @@ body { h2 { font-size: 120%; font-weight: bold; + margin-top: 0em; margin-bottom: 0.25em; } @@ -127,6 +128,25 @@ td#search input { background-color: #fff; } +td#summary { + vertical-align: top; + padding-bottom: 1em; +} + +td#archivelist { + padding-bottom: 1em; +} + +td#archivelist table { + float: right; + border-collapse: collapse; + border: solid 1px #777; +} + +td#archivelist table th { + background-color: #ccc; +} + td#content { padding: 1em 0.5em; } diff --git a/ui-summary.c b/ui-summary.c index 0a7869b..9388f5f 100644 --- a/ui-summary.c +++ b/ui-summary.c @@ -8,6 +8,8 @@ #include "cgit.h" +int items = 0; + static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1, int flags, void *cb_data) { @@ -83,6 +85,13 @@ static int cgit_print_tag_cb(const char *refname, const unsigned char *sha1, tag = lookup_tag(sha1); if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag))) return 2; + if (!items) { + html("Tag" + "Created" + "Author" + "Reference\n"); + } + items++; html(""); url = cgit_pageurl(cgit_query_repo, "view", fmt("id=%s", sha1_to_hex(sha1))); @@ -108,6 +117,44 @@ static int cgit_print_tag_cb(const char *refname, const unsigned char *sha1, return 0; } +static int cgit_print_archive_cb(const char *refname, const unsigned char *sha1, + int flags, void *cb_data) +{ + struct tag *tag; + struct taginfo *info; + struct object *obj; + char buf[256], *url; + + if (prefixcmp(refname, "refs/archives")) + return 0; + strncpy(buf, refname+14, sizeof(buf)); + obj = parse_object(sha1); + if (!obj) + return 1; + if (obj->type == OBJ_TAG) { + tag = lookup_tag(sha1); + if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag))) + return 0; + hashcpy(sha1, tag->tagged->sha1); + } else if (obj->type != OBJ_BLOB) { + return 0; + } + if (!items) { + html(""); + html(""); + } + items++; + html(""); + return 0; +} + static void cgit_print_branches() { html("" @@ -119,21 +166,30 @@ static void cgit_print_branches() static void cgit_print_tags() { - html("" - "" - "" - "\n"); + items = 0; for_each_tag_ref(cgit_print_tag_cb, NULL); } +static void cgit_print_archives() +{ + items = 0; + for_each_ref(cgit_print_archive_cb, NULL); + if (items) + html("
Downloads
"); + url = cgit_pageurl(cgit_query_repo, "blob", + fmt("id=%s&path=%s", sha1_to_hex(sha1), + buf)); + html_link_open(url, NULL, NULL); + html_txt(buf); + html_link_close(); + html("
Branch
TagCreatedAuthorReference
"); +} + void cgit_print_summary() { - html("

"); - html(cgit_repo->name); - html("

"); - html(cgit_repo->desc); - html("

"); html(""); + html(""); cgit_print_branches(); html(""); cgit_print_tags(); -- cgit
"); + html("

"); + html_txt(cgit_repo->name); + html(" - "); + html_txt(cgit_repo->desc); + html("

"); + html("
"); + cgit_print_archives(); + html("