Diffstat (limited to 'ui-summary.c')
| -rw-r--r-- | ui-summary.c | 65 |
1 files changed, 59 insertions, 6 deletions
diff --git a/ui-summary.c b/ui-summary.c index 39fe330..ba90510 100644 --- a/ui-summary.c +++ b/ui-summary.c @@ -120,6 +120,47 @@ static int print_tag(struct refinfo *ref) 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; + unsigned char fileid[20]; + + 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(fileid, tag->tagged->sha1); + } else if (obj->type != OBJ_BLOB) { + return 0; + } else { + hashcpy(fileid, sha1); + } + if (!header) { + html("<table id='downloads'>"); + html("<tr><th>Downloads</th></tr>"); + header = 1; + } + html("<tr><td>"); + url = cgit_pageurl(cgit_query_repo, "blob", + fmt("id=%s&path=%s", sha1_to_hex(fileid), + buf)); + html_link_open(url, NULL, NULL); + html_txt(buf); + html_link_close(); + html("</td></tr>"); + return 0; +} + static void print_refs_link(char *path) { html("<tr class='nohover'><td colspan='4'>"); @@ -180,16 +221,28 @@ void cgit_print_tags(int maxcount) print_refs_link("tags"); } +static void cgit_print_archives() +{ + header = 0; + for_each_ref(cgit_print_archive_cb, NULL); + if (header) + html("</table>"); +} + void cgit_print_summary() { - if (cgit_repo->readme) { - html("<div id='summary'>"); + html("<div id='summary'>"); + cgit_print_archives(); + html("<h2>"); + html_txt(cgit_repo->name); + html(" - "); + html_txt(cgit_repo->desc); + html("</h2>"); + if (cgit_repo->readme) html_include(cgit_repo->readme); - html("</div>"); - } + html("</div>"); if (cgit_summary_log > 0) - cgit_print_log(cgit_query_head, 0, cgit_summary_log, NULL, - NULL, NULL, 0); + cgit_print_log(cgit_query_head, 0, cgit_summary_log, NULL, NULL, NULL, 0); html("<table class='list nowrap'>"); if (cgit_summary_log > 0) html("<tr class='nohover'><td colspan='4'> </td></tr>"); |