]> gitweb.ps.run Git - ps-cgit/blob - ui-summary.c
Enable building with debuginfo
[ps-cgit] / ui-summary.c
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
11 static 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
50 static 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
97 static void cgit_print_branches()
98 {
99         html("<tr><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
106 static void cgit_print_tags()
107 {
108         html("<tr><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
115 void 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 }