all repos — cgit @ 14d360df60f059b9b5b045fc6df1eec6f0966d9a

a hyperfast web frontend for git written in c

ui-summary.c (view raw)

  1/* ui-summary.c: functions for generating repo summary page
  2 *
  3 * Copyright (C) 2006 Lars Hjemli
  4 *
  5 * Licensed under GNU General Public License v2
  6 *   (see COPYING for full license text)
  7 */
  8
  9#include "cgit.h"
 10
 11static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1,
 12				int flags, void *cb_data)
 13{
 14	struct commit *commit;
 15	struct commitinfo *info;
 16	char buf[256], *url;
 17
 18	strncpy(buf, refname, sizeof(buf));
 19	commit = lookup_commit(sha1);
 20	if (commit && !parse_commit(commit)){
 21		info = cgit_parse_commit(commit);
 22		html("<tr><td>");
 23		url = cgit_pageurl(cgit_query_repo, "log", 
 24				   fmt("h=%s", refname));
 25		html_link_open(url, NULL, NULL);
 26		html_txt(buf);
 27		html_link_close();
 28		html("</td><td>");
 29		cgit_print_date(commit->date);
 30		html("</td><td>");
 31		html_txt(info->author);
 32		html("</td><td>");
 33		url = cgit_pageurl(cgit_query_repo, "commit", 
 34				   fmt("id=%s", sha1_to_hex(sha1)));
 35		html_link_open(url, NULL, NULL);
 36		html_ntxt(cgit_max_msg_len, info->subject);
 37		html_link_close();
 38		html("</td></tr>\n");
 39		cgit_free_commitinfo(info);
 40	} else {
 41		html("<tr><td>");
 42		html_txt(buf);
 43		html("</td><td colspan='3'>");
 44		htmlf("*** bad ref %s ***", sha1_to_hex(sha1));
 45		html("</td></tr>\n");
 46	}
 47	return 0;
 48}
 49
 50
 51static void cgit_print_object_ref(struct object *obj)
 52{
 53	char *page, *url;
 54
 55	if (obj->type == OBJ_COMMIT)
 56		page = "commit";
 57	else if (obj->type == OBJ_TREE)
 58		page = "tree";
 59	else
 60		page = "view";
 61
 62	url = cgit_pageurl(cgit_query_repo, page, 
 63			   fmt("id=%s", sha1_to_hex(obj->sha1)));
 64	html_link_open(url, NULL, NULL);
 65	htmlf("%s %s", type_names[obj->type], 
 66	      sha1_to_hex(obj->sha1));
 67	html_link_close();
 68}
 69
 70static int cgit_print_tag_cb(const char *refname, const unsigned char *sha1,
 71				int flags, void *cb_data)
 72{
 73	struct tag *tag;
 74	struct taginfo *info;
 75	struct object *obj;
 76	char buf[256], *url;
 77 
 78	strncpy(buf, refname, sizeof(buf));
 79	obj = parse_object(sha1);
 80	if (!obj)
 81		return 1;
 82	if (obj->type == OBJ_TAG) {
 83		tag = lookup_tag(sha1);
 84		if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag)))
 85			return 2;
 86		html("<tr><td>");
 87		url = cgit_pageurl(cgit_query_repo, "view", 
 88				   fmt("id=%s", sha1_to_hex(sha1)));
 89		html_link_open(url, NULL, NULL);
 90		html_txt(buf);
 91		html_link_close();
 92		html("</td><td>");
 93		if (info->tagger_date > 0)
 94			cgit_print_date(info->tagger_date);
 95		html("</td><td>");
 96		if (info->tagger)
 97			html(info->tagger);
 98		html("</td><td>");
 99		cgit_print_object_ref(tag->tagged);
100		html("</td></tr>\n");
101	} else {
102		html("<tr><td>");
103		html_txt(buf);
104		html("</td><td colspan='2'/><td>");
105		cgit_print_object_ref(obj);
106		html("</td></tr>\n");
107	}
108	return 0;
109}
110
111static void cgit_print_branches()
112{
113	html("<tr class='nohover'><th class='left'>Branch</th>"
114	     "<th class='left'>Updated</th>"
115	     "<th class='left'>Author</th>"
116	     "<th class='left'>Head commit</th></tr>\n");
117	for_each_branch_ref(cgit_print_branch_cb, NULL);
118}
119
120static void cgit_print_tags()
121{
122	html("<tr class='nohover'><th class='left'>Tag</th>"
123	     "<th class='left'>Created</th>"
124	     "<th class='left'>Author</th>"
125	     "<th class='left'>Reference</th></tr>\n");
126	for_each_tag_ref(cgit_print_tag_cb, NULL);
127}
128
129void cgit_print_summary()
130{
131	html("<h2>");
132	html_txt("Repo summary page");
133	html("</h2>");
134	html("<table class='list nowrap'>");
135	cgit_print_branches();
136	html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>");
137	cgit_print_tags();
138	html("</table>");
139}