mirror of
https://git.zx2c4.com/cgit
synced 2024-11-25 09:58:41 +00:00
fb3655df3b
Use "struct strbuf" from Git to remove the limit on file path length. Notes on scan-tree: This is slightly involved since I decided to pass the strbuf into add_repo() and modify if whenever a new file name is required, which should avoid any extra allocations within that function. The pattern there is to append the filename, use it and then reset the buffer to its original length (retaining a trailing '/'). Notes on ui-snapshot: Since write_archive modifies the argv array passed to it we copy the argv_array values into a new array of char* and then free the original argv_array structure and the new array without worrying about what the values now look like. Signed-off-by: John Keeping <john@keeping.me.uk>
110 lines
2.5 KiB
C
110 lines
2.5 KiB
C
/* ui-tag.c: display a tag
|
|
*
|
|
* Copyright (C) 2007 Lars Hjemli
|
|
*
|
|
* Licensed under GNU General Public License v2
|
|
* (see COPYING for full license text)
|
|
*/
|
|
|
|
#include "cgit.h"
|
|
#include "ui-tag.h"
|
|
#include "html.h"
|
|
#include "ui-shared.h"
|
|
|
|
static void print_tag_content(char *buf)
|
|
{
|
|
char *p;
|
|
|
|
if (!buf)
|
|
return;
|
|
|
|
html("<div class='commit-subject'>");
|
|
p = strchr(buf, '\n');
|
|
if (p)
|
|
*p = '\0';
|
|
html_txt(buf);
|
|
html("</div>");
|
|
if (p) {
|
|
html("<div class='commit-msg'>");
|
|
html_txt(++p);
|
|
html("</div>");
|
|
}
|
|
}
|
|
|
|
static void print_download_links(char *revname)
|
|
{
|
|
html("<tr><th>download</th><td class='sha1'>");
|
|
cgit_print_snapshot_links(ctx.qry.repo, ctx.qry.head,
|
|
revname, ctx.repo->snapshots);
|
|
html("</td></tr>");
|
|
}
|
|
|
|
void cgit_print_tag(char *revname)
|
|
{
|
|
struct strbuf fullref = STRBUF_INIT;
|
|
unsigned char sha1[20];
|
|
struct object *obj;
|
|
struct tag *tag;
|
|
struct taginfo *info;
|
|
|
|
if (!revname)
|
|
revname = ctx.qry.head;
|
|
|
|
strbuf_addf(&fullref, "refs/tags/%s", revname);
|
|
if (get_sha1(fullref.buf, sha1)) {
|
|
cgit_print_error("Bad tag reference: %s", revname);
|
|
goto cleanup;
|
|
}
|
|
obj = parse_object(sha1);
|
|
if (!obj) {
|
|
cgit_print_error("Bad object id: %s", sha1_to_hex(sha1));
|
|
goto cleanup;
|
|
}
|
|
if (obj->type == OBJ_TAG) {
|
|
tag = lookup_tag(sha1);
|
|
if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag))) {
|
|
cgit_print_error("Bad tag object: %s", revname);
|
|
goto cleanup;
|
|
}
|
|
html("<table class='commit-info'>\n");
|
|
htmlf("<tr><td>tag name</td><td>");
|
|
html_txt(revname);
|
|
htmlf(" (%s)</td></tr>\n", sha1_to_hex(sha1));
|
|
if (info->tagger_date > 0) {
|
|
html("<tr><td>tag date</td><td>");
|
|
cgit_print_date(info->tagger_date, FMT_LONGDATE, ctx.cfg.local_time);
|
|
html("</td></tr>\n");
|
|
}
|
|
if (info->tagger) {
|
|
html("<tr><td>tagged by</td><td>");
|
|
html_txt(info->tagger);
|
|
if (info->tagger_email && !ctx.cfg.noplainemail) {
|
|
html(" ");
|
|
html_txt(info->tagger_email);
|
|
}
|
|
html("</td></tr>\n");
|
|
}
|
|
html("<tr><td>tagged object</td><td class='sha1'>");
|
|
cgit_object_link(tag->tagged);
|
|
html("</td></tr>\n");
|
|
if (ctx.repo->snapshots)
|
|
print_download_links(revname);
|
|
html("</table>\n");
|
|
print_tag_content(info->msg);
|
|
} else {
|
|
html("<table class='commit-info'>\n");
|
|
htmlf("<tr><td>tag name</td><td>");
|
|
html_txt(revname);
|
|
html("</td></tr>\n");
|
|
html("<tr><td>Tagged object</td><td class='sha1'>");
|
|
cgit_object_link(obj);
|
|
html("</td></tr>\n");
|
|
if (ctx.repo->snapshots)
|
|
print_download_links(revname);
|
|
html("</table>\n");
|
|
}
|
|
|
|
cleanup:
|
|
strbuf_release(&fullref);
|
|
}
|