all repos — cgit @ 777faf7e509e1de2b795b2a326ff00c9bd799104

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(80, 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
 50static int cgit_print_tag_cb(const char *refname, const unsigned char *sha1,
 51				int flags, void *cb_data)
 52{
 53	struct tag *tag;
 54	struct taginfo *info;
 55	char buf[256], *page, *url;
 56
 57	strncpy(buf, refname, sizeof(buf));
 58	tag = lookup_tag(sha1);
 59	if (tag && !parse_tag(tag) && (info = cgit_parse_tag(tag))){
 60		html("<tr><td>");
 61		url = cgit_pageurl(cgit_query_repo, "view", 
 62				   fmt("id=%s", sha1_to_hex(sha1)));
 63		html_link_open(url, NULL, NULL);
 64		html_txt(buf);
 65		html_link_close();
 66		html("</td><td>");
 67		if (info->tagger_date > 0)
 68			cgit_print_date(info->tagger_date);
 69		html("</td><td>");
 70		if (info->tagger)
 71			html(info->tagger);
 72		html("</td><td>");
 73		if (tag->tagged->type == OBJ_COMMIT)
 74			page = "commit";
 75		else if (tag->tagged->type == OBJ_TREE)
 76			page = "tree";
 77		else
 78			page = "view";
 79		
 80		url = cgit_pageurl(cgit_query_repo, page, 
 81				   fmt("id=%s", sha1_to_hex(tag->tagged->sha1)));
 82		html_link_open(url, NULL, NULL);
 83		htmlf("%s %s", type_names[tag->tagged->type], 
 84		      sha1_to_hex(tag->tagged->sha1));
 85		html_link_close();
 86		html("</td></tr>\n");
 87	} else {
 88		html("<tr><td>");
 89		html_txt(buf);
 90		html("</td><td colspan='3'>");
 91		htmlf("*** bad ref %s ***", sha1_to_hex(sha1));
 92		html("</td></tr>\n");
 93	}
 94	return 0;
 95}
 96
 97static void cgit_print_branches()
 98{
 99	html("<tr class='nohover'><th class='left'>Branch</th>"
100	     "<th class='left'>Updated</th>"
101	     "<th class='left'>Author</th>"
102	     "<th class='left'>Head commit</th></tr>\n");
103	for_each_branch_ref(cgit_print_branch_cb, NULL);
104}
105
106static void cgit_print_tags()
107{
108	html("<tr class='nohover'><th class='left'>Tag</th>"
109	     "<th class='left'>Created</th>"
110	     "<th class='left'>Author</th>"
111	     "<th class='left'>Reference</th></tr>\n");
112	for_each_tag_ref(cgit_print_tag_cb, NULL);
113}
114
115void cgit_print_summary()
116{
117	html("<h2>");
118	html_txt("Repo summary page");
119	html("</h2>");
120	html("<table class='list nowrap'>");
121	cgit_print_branches();
122	html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>");
123	cgit_print_tags();
124	html("</table>");
125}