summaryrefslogtreecommitdiffabout
path: root/ui-summary.c
Unidiff
Diffstat (limited to 'ui-summary.c') (more/less context) (ignore whitespace changes)
-rw-r--r--ui-summary.c33
1 files changed, 4 insertions, 29 deletions
diff --git a/ui-summary.c b/ui-summary.c
index b4bc6d8..de8a180 100644
--- a/ui-summary.c
+++ b/ui-summary.c
@@ -1,214 +1,189 @@
1/* ui-summary.c: functions for generating repo summary page 1/* ui-summary.c: functions for generating repo summary page
2 * 2 *
3 * Copyright (C) 2006 Lars Hjemli 3 * Copyright (C) 2006 Lars Hjemli
4 * 4 *
5 * Licensed under GNU General Public License v2 5 * Licensed under GNU General Public License v2
6 * (see COPYING for full license text) 6 * (see COPYING for full license text)
7 */ 7 */
8 8
9#include "cgit.h" 9#include "cgit.h"
10 10
11static int header; 11static int header;
12 12
13static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1, 13static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1,
14 int flags, void *cb_data) 14 int flags, void *cb_data)
15{ 15{
16 struct commit *commit; 16 struct commit *commit;
17 struct commitinfo *info; 17 struct commitinfo *info;
18 char buf[256]; 18 char buf[256];
19 char *ref; 19 char *ref;
20 20
21 ref = xstrdup(refname); 21 ref = xstrdup(refname);
22 strncpy(buf, refname, sizeof(buf)); 22 strncpy(buf, refname, sizeof(buf));
23 commit = lookup_commit(sha1); 23 commit = lookup_commit(sha1);
24 // object is not really parsed at this point, because of some fallout 24 // object is not really parsed at this point, because of some fallout
25 // from previous calls to git functions in cgit_print_log() 25 // from previous calls to git functions in cgit_print_log()
26 commit->object.parsed = 0; 26 commit->object.parsed = 0;
27 if (commit && !parse_commit(commit)){ 27 if (commit && !parse_commit(commit)){
28 info = cgit_parse_commit(commit); 28 info = cgit_parse_commit(commit);
29 html("<tr><td>"); 29 html("<tr><td>");
30 cgit_log_link(ref, NULL, NULL, ref, NULL, NULL, 0); 30 cgit_log_link(ref, NULL, NULL, ref, NULL, NULL, 0);
31 html("</td><td>"); 31 html("</td><td>");
32 cgit_print_age(commit->date, -1, NULL); 32 cgit_print_age(commit->date, -1, NULL);
33 html("</td><td>"); 33 html("</td><td>");
34 html_txt(info->author); 34 html_txt(info->author);
35 html("</td><td>"); 35 html("</td><td>");
36 cgit_commit_link(info->subject, NULL, NULL, ref, NULL); 36 cgit_commit_link(info->subject, NULL, NULL, ref, NULL);
37 html("</td></tr>\n"); 37 html("</td></tr>\n");
38 cgit_free_commitinfo(info); 38 cgit_free_commitinfo(info);
39 } else { 39 } else {
40 html("<tr><td>"); 40 html("<tr><td>");
41 html_txt(buf); 41 html_txt(buf);
42 html("</td><td colspan='3'>"); 42 html("</td><td colspan='3'>");
43 htmlf("*** bad ref %s ***", sha1_to_hex(sha1)); 43 htmlf("*** bad ref %s ***", sha1_to_hex(sha1));
44 html("</td></tr>\n"); 44 html("</td></tr>\n");
45 } 45 }
46 free(ref); 46 free(ref);
47 return 0; 47 return 0;
48} 48}
49 49
50
51static void cgit_print_object_ref(struct object *obj)
52{
53 char *page, *arg, *url;
54
55 if (obj->type == OBJ_COMMIT) {
56 cgit_commit_link(fmt("commit %s", sha1_to_hex(obj->sha1)), NULL, NULL,
57 cgit_query_head, sha1_to_hex(obj->sha1));
58 return;
59 } else if (obj->type == OBJ_TREE) {
60 page = "tree";
61 arg = "id";
62 } else {
63 page = "view";
64 arg = "id";
65 }
66
67 url = cgit_pageurl(cgit_query_repo, page,
68 fmt("%s=%s", arg, sha1_to_hex(obj->sha1)));
69 html_link_open(url, NULL, NULL);
70 htmlf("%s %s", typename(obj->type),
71 sha1_to_hex(obj->sha1));
72 html_link_close();
73}
74
75static void print_tag_header() 50static void print_tag_header()
76{ 51{
77 html("<tr class='nohover'><th class='left'>Tag</th>" 52 html("<tr class='nohover'><th class='left'>Tag</th>"
78 "<th class='left'>Age</th>" 53 "<th class='left'>Age</th>"
79 "<th class='left'>Author</th>" 54 "<th class='left'>Author</th>"
80 "<th class='left'>Reference</th></tr>\n"); 55 "<th class='left'>Reference</th></tr>\n");
81 header = 1; 56 header = 1;
82} 57}
83 58
84static int cgit_print_tag_cb(const char *refname, const unsigned char *sha1, 59static int cgit_print_tag_cb(const char *refname, const unsigned char *sha1,
85 int flags, void *cb_data) 60 int flags, void *cb_data)
86{ 61{
87 struct tag *tag; 62 struct tag *tag;
88 struct taginfo *info; 63 struct taginfo *info;
89 struct object *obj; 64 struct object *obj;
90 char buf[256], *url; 65 char buf[256], *url;
91 66
92 strncpy(buf, refname, sizeof(buf)); 67 strncpy(buf, refname, sizeof(buf));
93 obj = parse_object(sha1); 68 obj = parse_object(sha1);
94 if (!obj) 69 if (!obj)
95 return 1; 70 return 1;
96 if (obj->type == OBJ_TAG) { 71 if (obj->type == OBJ_TAG) {
97 tag = lookup_tag(sha1); 72 tag = lookup_tag(sha1);
98 if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag))) 73 if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag)))
99 return 2; 74 return 2;
100 if (!header) 75 if (!header)
101 print_tag_header(); 76 print_tag_header();
102 html("<tr><td>"); 77 html("<tr><td>");
103 url = cgit_pageurl(cgit_query_repo, "view", 78 url = cgit_pageurl(cgit_query_repo, "tag",
104 fmt("id=%s", sha1_to_hex(sha1))); 79 fmt("id=%s", refname));
105 html_link_open(url, NULL, NULL); 80 html_link_open(url, NULL, NULL);
106 html_txt(buf); 81 html_txt(buf);
107 html_link_close(); 82 html_link_close();
108 html("</td><td>"); 83 html("</td><td>");
109 if (info->tagger_date > 0) 84 if (info->tagger_date > 0)
110 cgit_print_age(info->tagger_date, -1, NULL); 85 cgit_print_age(info->tagger_date, -1, NULL);
111 html("</td><td>"); 86 html("</td><td>");
112 if (info->tagger) 87 if (info->tagger)
113 html(info->tagger); 88 html(info->tagger);
114 html("</td><td>"); 89 html("</td><td>");
115 cgit_print_object_ref(tag->tagged); 90 cgit_object_link(tag->tagged);
116 html("</td></tr>\n"); 91 html("</td></tr>\n");
117 } else { 92 } else {
118 if (!header) 93 if (!header)
119 print_tag_header(); 94 print_tag_header();
120 html("<tr><td>"); 95 html("<tr><td>");
121 html_txt(buf); 96 html_txt(buf);
122 html("</td><td colspan='2'/><td>"); 97 html("</td><td colspan='2'/><td>");
123 cgit_print_object_ref(obj); 98 cgit_object_link(obj);
124 html("</td></tr>\n"); 99 html("</td></tr>\n");
125 } 100 }
126 return 0; 101 return 0;
127} 102}
128 103
129static int cgit_print_archive_cb(const char *refname, const unsigned char *sha1, 104static int cgit_print_archive_cb(const char *refname, const unsigned char *sha1,
130 int flags, void *cb_data) 105 int flags, void *cb_data)
131{ 106{
132 struct tag *tag; 107 struct tag *tag;
133 struct taginfo *info; 108 struct taginfo *info;
134 struct object *obj; 109 struct object *obj;
135 char buf[256], *url; 110 char buf[256], *url;
136 unsigned char fileid[20]; 111 unsigned char fileid[20];
137 112
138 if (prefixcmp(refname, "refs/archives")) 113 if (prefixcmp(refname, "refs/archives"))
139 return 0; 114 return 0;
140 strncpy(buf, refname+14, sizeof(buf)); 115 strncpy(buf, refname+14, sizeof(buf));
141 obj = parse_object(sha1); 116 obj = parse_object(sha1);
142 if (!obj) 117 if (!obj)
143 return 1; 118 return 1;
144 if (obj->type == OBJ_TAG) { 119 if (obj->type == OBJ_TAG) {
145 tag = lookup_tag(sha1); 120 tag = lookup_tag(sha1);
146 if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag))) 121 if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag)))
147 return 0; 122 return 0;
148 hashcpy(fileid, tag->tagged->sha1); 123 hashcpy(fileid, tag->tagged->sha1);
149 } else if (obj->type != OBJ_BLOB) { 124 } else if (obj->type != OBJ_BLOB) {
150 return 0; 125 return 0;
151 } else { 126 } else {
152 hashcpy(fileid, sha1); 127 hashcpy(fileid, sha1);
153 } 128 }
154 if (!header) { 129 if (!header) {
155 html("<table id='downloads'>"); 130 html("<table id='downloads'>");
156 html("<tr><th>Downloads</th></tr>"); 131 html("<tr><th>Downloads</th></tr>");
157 header = 1; 132 header = 1;
158 } 133 }
159 html("<tr><td>"); 134 html("<tr><td>");
160 url = cgit_pageurl(cgit_query_repo, "blob", 135 url = cgit_pageurl(cgit_query_repo, "blob",
161 fmt("id=%s&amp;path=%s", sha1_to_hex(fileid), 136 fmt("id=%s&amp;path=%s", sha1_to_hex(fileid),
162 buf)); 137 buf));
163 html_link_open(url, NULL, NULL); 138 html_link_open(url, NULL, NULL);
164 html_txt(buf); 139 html_txt(buf);
165 html_link_close(); 140 html_link_close();
166 html("</td></tr>"); 141 html("</td></tr>");
167 return 0; 142 return 0;
168} 143}
169 144
170static void cgit_print_branches() 145static void cgit_print_branches()
171{ 146{
172 html("<tr class='nohover'><th class='left'>Branch</th>" 147 html("<tr class='nohover'><th class='left'>Branch</th>"
173 "<th class='left'>Idle</th>" 148 "<th class='left'>Idle</th>"
174 "<th class='left'>Author</th>" 149 "<th class='left'>Author</th>"
175 "<th class='left'>Head commit</th></tr>\n"); 150 "<th class='left'>Head commit</th></tr>\n");
176 for_each_branch_ref(cgit_print_branch_cb, NULL); 151 for_each_branch_ref(cgit_print_branch_cb, NULL);
177} 152}
178 153
179static void cgit_print_tags() 154static void cgit_print_tags()
180{ 155{
181 header = 0; 156 header = 0;
182 for_each_tag_ref(cgit_print_tag_cb, NULL); 157 for_each_tag_ref(cgit_print_tag_cb, NULL);
183} 158}
184 159
185static void cgit_print_archives() 160static void cgit_print_archives()
186{ 161{
187 header = 0; 162 header = 0;
188 for_each_ref(cgit_print_archive_cb, NULL); 163 for_each_ref(cgit_print_archive_cb, NULL);
189 if (header) 164 if (header)
190 html("</table>"); 165 html("</table>");
191} 166}
192 167
193void cgit_print_summary() 168void cgit_print_summary()
194{ 169{
195 html("<div id='summary'>"); 170 html("<div id='summary'>");
196 cgit_print_archives(); 171 cgit_print_archives();
197 html("<h2>"); 172 html("<h2>");
198 html_txt(cgit_repo->name); 173 html_txt(cgit_repo->name);
199 html(" - "); 174 html(" - ");
200 html_txt(cgit_repo->desc); 175 html_txt(cgit_repo->desc);
201 html("</h2>"); 176 html("</h2>");
202 if (cgit_repo->readme) 177 if (cgit_repo->readme)
203 html_include(cgit_repo->readme); 178 html_include(cgit_repo->readme);
204 html("</div>"); 179 html("</div>");
205 if (cgit_summary_log > 0) 180 if (cgit_summary_log > 0)
206 cgit_print_log(cgit_query_head, 0, cgit_summary_log, NULL, NULL, 0); 181 cgit_print_log(cgit_query_head, 0, cgit_summary_log, NULL, NULL, 0);
207 html("<table class='list nowrap'>"); 182 html("<table class='list nowrap'>");
208 if (cgit_summary_log > 0) 183 if (cgit_summary_log > 0)
209 html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>"); 184 html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>");
210 cgit_print_branches(); 185 cgit_print_branches();
211 html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>"); 186 html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>");
212 cgit_print_tags(); 187 cgit_print_tags();
213 html("</table>"); 188 html("</table>");
214} 189}