summaryrefslogtreecommitdiffstatshomepage
path: root/ui-tag.c
blob: b4db32e396dc18b3761bfd2a049c8a9b6bee4fd8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/* 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 "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>");
	}
}

void cgit_print_tag(char *revname)
{
	unsigned char sha1[20];
	struct object *obj;
	struct tag *tag;
	struct taginfo *info;

	if (get_sha1(revname, sha1)) {
		cgit_print_error(fmt("Bad tag reference: %s", revname));
		return;
	}
	obj = parse_object(sha1);
	if (!obj) {
		cgit_print_error(fmt("Bad object id: %s", sha1_to_hex(sha1)));
		return;
	}
	if (obj->type == OBJ_TAG) {
		tag = lookup_tag(sha1);
		if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag))) {
			cgit_print_error(fmt("Bad tag object: %s", revname));
			return;
		}
		html("<table class='commit-info'>\n");
		htmlf("<tr><td>Tag name</td><td>%s (%s)</td></tr>\n",
		      revname, 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);
			html("</td></tr>\n");
		}
		html("<tr><td>Tagged object</td><td>");
		cgit_object_link(tag->tagged);
		html("</td></tr>\n");
		html("</table>\n");
		print_tag_content(info->msg);
	}
	return;
}
ss="p">.qry.path); } static void diff_fn(void) { cgit_print_diff(ctx.qry.sha1, ctx.qry.sha2, ctx.qry.path, 1, 0); } static void rawdiff_fn(void) { cgit_print_diff(ctx.qry.sha1, ctx.qry.sha2, ctx.qry.path, 1, 1); } static void info_fn(void) { cgit_clone_info(); } static void log_fn(void) { cgit_print_log(ctx.qry.sha1, ctx.qry.ofs, ctx.cfg.max_commit_count, ctx.qry.grep, ctx.qry.search, ctx.qry.path, 1, ctx.repo->enable_commit_graph, ctx.repo->commit_sort); } static void ls_cache_fn(void) { ctx.page.mimetype = "text/plain"; ctx.page.filename = "ls-cache.txt"; cgit_print_http_headers(); cache_ls(ctx.cfg.cache_root); } static void objects_fn(void) { cgit_clone_objects(); } static void repolist_fn(void) { cgit_print_repolist(); } static void patch_fn(void) { cgit_print_patch(ctx.qry.sha1, ctx.qry.sha2, ctx.qry.path); } static void plain_fn(void) { cgit_print_plain(); } static void refs_fn(void) { cgit_print_refs(); } static void snapshot_fn(void) { cgit_print_snapshot(ctx.qry.head, ctx.qry.sha1, ctx.qry.path, ctx.qry.nohead); } static void stats_fn(void) { cgit_show_stats(); } static void summary_fn(void) { cgit_print_summary(); } static void tag_fn(void) { cgit_print_tag(ctx.qry.sha1); } static void tree_fn(void) { cgit_print_tree(ctx.qry.sha1, ctx.qry.path); } #define def_cmp(name, want_repo, want_vpath, is_clone) \ {#name, name##_fn, name##_pre, want_repo, want_vpath, is_clone} #define def_cmd(name, want_repo, want_vpath, is_clone) \ {#name, name##_fn, NULL, want_repo, want_vpath, is_clone} struct cgit_cmd *cgit_get_cmd(void) { static struct cgit_cmd cmds[] = { def_cmd(HEAD, 1, 0, 1), def_cmd(atom, 1, 0, 0), def_cmp(about, 0, 0, 0), def_cmd(blob, 1, 0, 0), def_cmd(commit, 1, 1, 0), def_cmd(diff, 1, 1, 0), def_cmd(info, 1, 0, 1), def_cmd(log, 1, 1, 0), def_cmd(ls_cache, 0, 0, 0), def_cmd(objects, 1, 0, 1), def_cmd(patch, 1, 1, 0), def_cmd(plain, 1, 0, 0), def_cmd(rawdiff, 1, 1, 0), def_cmd(refs, 1, 0, 0), def_cmd(repolist, 0, 0, 0), def_cmd(snapshot, 1, 0, 0), def_cmd(stats, 1, 1, 0), def_cmd(summary, 1, 0, 0), def_cmd(tag, 1, 0, 0), def_cmd(tree, 1, 1, 0), }; int i; if (ctx.qry.page == NULL) { if (ctx.repo) ctx.qry.page = "summary"; else ctx.qry.page = "repolist"; } for (i = 0; i < sizeof(cmds)/sizeof(*cmds); i++) if (!strcmp(ctx.qry.page, cmds[i].name)) return &cmds[i]; return NULL; }