summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--ui-shared.c6
-rw-r--r--ui-shared.h2
-rw-r--r--ui-tree.c8
3 files changed, 12 insertions, 4 deletions
diff --git a/ui-shared.c b/ui-shared.c
index 4408969..a2e0dd2 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -214,64 +214,70 @@ static char *repolink(char *title, char *class, char *page, char *head,
214 } 214 }
215 if (head && strcmp(head, ctx.repo->defbranch)) { 215 if (head && strcmp(head, ctx.repo->defbranch)) {
216 html(delim); 216 html(delim);
217 html("h="); 217 html("h=");
218 html_attr(head); 218 html_attr(head);
219 delim = "&"; 219 delim = "&";
220 } 220 }
221 return fmt("%s", delim); 221 return fmt("%s", delim);
222} 222}
223 223
224static void reporevlink(char *page, char *name, char *title, char *class, 224static void reporevlink(char *page, char *name, char *title, char *class,
225 char *head, char *rev, char *path) 225 char *head, char *rev, char *path)
226{ 226{
227 char *delim; 227 char *delim;
228 228
229 delim = repolink(title, class, page, head, path); 229 delim = repolink(title, class, page, head, path);
230 if (rev && strcmp(rev, ctx.qry.head)) { 230 if (rev && strcmp(rev, ctx.qry.head)) {
231 html(delim); 231 html(delim);
232 html("id="); 232 html("id=");
233 html_attr(rev); 233 html_attr(rev);
234 } 234 }
235 html("'>"); 235 html("'>");
236 html_txt(name); 236 html_txt(name);
237 html("</a>"); 237 html("</a>");
238} 238}
239 239
240void cgit_tree_link(char *name, char *title, char *class, char *head, 240void cgit_tree_link(char *name, char *title, char *class, char *head,
241 char *rev, char *path) 241 char *rev, char *path)
242{ 242{
243 reporevlink("tree", name, title, class, head, rev, path); 243 reporevlink("tree", name, title, class, head, rev, path);
244} 244}
245 245
246void cgit_plain_link(char *name, char *title, char *class, char *head,
247 char *rev, char *path)
248{
249 reporevlink("plain", name, title, class, head, rev, path);
250}
251
246void cgit_log_link(char *name, char *title, char *class, char *head, 252void cgit_log_link(char *name, char *title, char *class, char *head,
247 char *rev, char *path, int ofs, char *grep, char *pattern) 253 char *rev, char *path, int ofs, char *grep, char *pattern)
248{ 254{
249 char *delim; 255 char *delim;
250 256
251 delim = repolink(title, class, "log", head, path); 257 delim = repolink(title, class, "log", head, path);
252 if (rev && strcmp(rev, ctx.qry.head)) { 258 if (rev && strcmp(rev, ctx.qry.head)) {
253 html(delim); 259 html(delim);
254 html("id="); 260 html("id=");
255 html_attr(rev); 261 html_attr(rev);
256 delim = "&"; 262 delim = "&";
257 } 263 }
258 if (grep && pattern) { 264 if (grep && pattern) {
259 html(delim); 265 html(delim);
260 html("qt="); 266 html("qt=");
261 html_attr(grep); 267 html_attr(grep);
262 delim = "&"; 268 delim = "&";
263 html(delim); 269 html(delim);
264 html("q="); 270 html("q=");
265 html_attr(pattern); 271 html_attr(pattern);
266 } 272 }
267 if (ofs > 0) { 273 if (ofs > 0) {
268 html(delim); 274 html(delim);
269 html("ofs="); 275 html("ofs=");
270 htmlf("%d", ofs); 276 htmlf("%d", ofs);
271 } 277 }
272 html("'>"); 278 html("'>");
273 html_txt(name); 279 html_txt(name);
274 html("</a>"); 280 html("</a>");
275} 281}
276 282
277void cgit_commit_link(char *name, char *title, char *class, char *head, 283void cgit_commit_link(char *name, char *title, char *class, char *head,
diff --git a/ui-shared.h b/ui-shared.h
index 07da4b4..c5ce056 100644
--- a/ui-shared.h
+++ b/ui-shared.h
@@ -1,40 +1,42 @@
1#ifndef UI_SHARED_H 1#ifndef UI_SHARED_H
2#define UI_SHARED_H 2#define UI_SHARED_H
3 3
4extern char *cgit_repourl(const char *reponame); 4extern char *cgit_repourl(const char *reponame);
5extern char *cgit_fileurl(const char *reponame, const char *pagename, 5extern char *cgit_fileurl(const char *reponame, const char *pagename,
6 const char *filename, const char *query); 6 const char *filename, const char *query);
7extern char *cgit_pageurl(const char *reponame, const char *pagename, 7extern char *cgit_pageurl(const char *reponame, const char *pagename,
8 const char *query); 8 const char *query);
9 9
10extern void cgit_index_link(char *name, char *title, char *class, 10extern void cgit_index_link(char *name, char *title, char *class,
11 char *pattern, int ofs); 11 char *pattern, int ofs);
12extern void cgit_tree_link(char *name, char *title, char *class, char *head, 12extern void cgit_tree_link(char *name, char *title, char *class, char *head,
13 char *rev, char *path); 13 char *rev, char *path);
14extern void cgit_plain_link(char *name, char *title, char *class, char *head,
15 char *rev, char *path);
14extern void cgit_log_link(char *name, char *title, char *class, char *head, 16extern void cgit_log_link(char *name, char *title, char *class, char *head,
15 char *rev, char *path, int ofs, char *grep, 17 char *rev, char *path, int ofs, char *grep,
16 char *pattern); 18 char *pattern);
17extern void cgit_commit_link(char *name, char *title, char *class, char *head, 19extern void cgit_commit_link(char *name, char *title, char *class, char *head,
18 char *rev); 20 char *rev);
19extern void cgit_patch_link(char *name, char *title, char *class, char *head, 21extern void cgit_patch_link(char *name, char *title, char *class, char *head,
20 char *rev); 22 char *rev);
21extern void cgit_refs_link(char *name, char *title, char *class, char *head, 23extern void cgit_refs_link(char *name, char *title, char *class, char *head,
22 char *rev, char *path); 24 char *rev, char *path);
23extern void cgit_snapshot_link(char *name, char *title, char *class, 25extern void cgit_snapshot_link(char *name, char *title, char *class,
24 char *head, char *rev, char *archivename); 26 char *head, char *rev, char *archivename);
25extern void cgit_diff_link(char *name, char *title, char *class, char *head, 27extern void cgit_diff_link(char *name, char *title, char *class, char *head,
26 char *new_rev, char *old_rev, char *path); 28 char *new_rev, char *old_rev, char *path);
27extern void cgit_object_link(struct object *obj); 29extern void cgit_object_link(struct object *obj);
28 30
29extern void cgit_print_error(char *msg); 31extern void cgit_print_error(char *msg);
30extern void cgit_print_date(time_t secs, char *format, int local_time); 32extern void cgit_print_date(time_t secs, char *format, int local_time);
31extern void cgit_print_age(time_t t, time_t max_relative, char *format); 33extern void cgit_print_age(time_t t, time_t max_relative, char *format);
32extern void cgit_print_http_headers(struct cgit_context *ctx); 34extern void cgit_print_http_headers(struct cgit_context *ctx);
33extern void cgit_print_docstart(struct cgit_context *ctx); 35extern void cgit_print_docstart(struct cgit_context *ctx);
34extern void cgit_print_docend(); 36extern void cgit_print_docend();
35extern void cgit_print_pageheader(struct cgit_context *ctx); 37extern void cgit_print_pageheader(struct cgit_context *ctx);
36extern void cgit_print_filemode(unsigned short mode); 38extern void cgit_print_filemode(unsigned short mode);
37extern void cgit_print_snapshot_links(const char *repo, const char *head, 39extern void cgit_print_snapshot_links(const char *repo, const char *head,
38 const char *hex, int snapshots); 40 const char *hex, int snapshots);
39 41
40#endif /* UI_SHARED_H */ 42#endif /* UI_SHARED_H */
diff --git a/ui-tree.c b/ui-tree.c
index 9a837e2..79332fc 100644
--- a/ui-tree.c
+++ b/ui-tree.c
@@ -6,68 +6,68 @@
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#include "html.h" 10#include "html.h"
11#include "ui-shared.h" 11#include "ui-shared.h"
12 12
13char *curr_rev; 13char *curr_rev;
14char *match_path; 14char *match_path;
15int header = 0; 15int header = 0;
16 16
17static void print_object(const unsigned char *sha1, char *path) 17static void print_object(const unsigned char *sha1, char *path)
18{ 18{
19 enum object_type type; 19 enum object_type type;
20 char *buf; 20 char *buf;
21 unsigned long size, lineno, start, idx; 21 unsigned long size, lineno, start, idx;
22 const char *linefmt = "<tr><td class='no'><a id='n%1$d' name='n%1$d' href='#n%1$d'>%1$d</a></td><td class='txt'>"; 22 const char *linefmt = "<tr><td class='no'><a id='n%1$d' name='n%1$d' href='#n%1$d'>%1$d</a></td><td class='txt'>";
23 23
24 type = sha1_object_info(sha1, &size); 24 type = sha1_object_info(sha1, &size);
25 if (type == OBJ_BAD) { 25 if (type == OBJ_BAD) {
26 cgit_print_error(fmt("Bad object name: %s", 26 cgit_print_error(fmt("Bad object name: %s",
27 sha1_to_hex(sha1))); 27 sha1_to_hex(sha1)));
28 return; 28 return;
29 } 29 }
30 30
31 buf = read_sha1_file(sha1, &type, &size); 31 buf = read_sha1_file(sha1, &type, &size);
32 if (!buf) { 32 if (!buf) {
33 cgit_print_error(fmt("Error reading object %s", 33 cgit_print_error(fmt("Error reading object %s",
34 sha1_to_hex(sha1))); 34 sha1_to_hex(sha1)));
35 return; 35 return;
36 } 36 }
37 37
38 html(" blob: <a href='"); 38 html(" (");
39 html_attr(cgit_pageurl(ctx.qry.repo, "blob", 39 cgit_plain_link("plain", NULL, NULL, ctx.qry.head,
40 fmt("id=%s&path=%s", sha1_to_hex(sha1), path))); 40 curr_rev, path);
41 htmlf("'>%s</a>",sha1_to_hex(sha1)); 41 htmlf(")<br/>blob: %s", sha1_to_hex(sha1));
42 42
43 html("<table summary='blob content' class='blob'>\n"); 43 html("<table summary='blob content' class='blob'>\n");
44 idx = 0; 44 idx = 0;
45 start = 0; 45 start = 0;
46 lineno = 0; 46 lineno = 0;
47 while(idx < size) { 47 while(idx < size) {
48 if (buf[idx] == '\n') { 48 if (buf[idx] == '\n') {
49 buf[idx] = '\0'; 49 buf[idx] = '\0';
50 htmlf(linefmt, ++lineno); 50 htmlf(linefmt, ++lineno);
51 html_txt(buf + start); 51 html_txt(buf + start);
52 html("</td></tr>\n"); 52 html("</td></tr>\n");
53 start = idx + 1; 53 start = idx + 1;
54 } 54 }
55 idx++; 55 idx++;
56 } 56 }
57 htmlf(linefmt, ++lineno); 57 htmlf(linefmt, ++lineno);
58 html_txt(buf + start); 58 html_txt(buf + start);
59 html("</td></tr>\n"); 59 html("</td></tr>\n");
60 html("</table>\n"); 60 html("</table>\n");
61} 61}
62 62
63 63
64static int ls_item(const unsigned char *sha1, const char *base, int baselen, 64static int ls_item(const unsigned char *sha1, const char *base, int baselen,
65 const char *pathname, unsigned int mode, int stage, 65 const char *pathname, unsigned int mode, int stage,
66 void *cbdata) 66 void *cbdata)
67{ 67{
68 char *name; 68 char *name;
69 char *fullpath; 69 char *fullpath;
70 enum object_type type; 70 enum object_type type;
71 unsigned long size = 0; 71 unsigned long size = 0;
72 72
73 name = xstrdup(pathname); 73 name = xstrdup(pathname);