|
diff --git a/ui-tree.c b/ui-tree.c index a164767..0b1b531 100644 --- a/ ui-tree.c+++ b/ ui-tree.c |
|
@@ -45,9 +45,9 @@ static void print_text_buffer(const char *name, char *buf, unsigned long size) |
45 | if (ctx.repo->source_filter) { |
45 | if (ctx.repo->source_filter) { |
46 | html("<td class='lines'><pre><code>"); |
46 | html("<td class='lines'><pre><code>"); |
47 | ctx.repo->source_filter->argv[1] = xstrdup(name); |
47 | ctx.repo->source_filter->argv[1] = xstrdup(name); |
48 | cgit_open_filter(ctx.repo->source_filter); |
48 | cgit_open_filter(ctx.repo->source_filter); |
49 | write(STDOUT_FILENO, buf, size); |
49 | html_raw(buf, size); |
50 | cgit_close_filter(ctx.repo->source_filter); |
50 | cgit_close_filter(ctx.repo->source_filter); |
51 | html("</code></pre></td></tr></table>\n"); |
51 | html("</code></pre></td></tr></table>\n"); |
52 | return; |
52 | return; |
53 | } |
53 | } |
@@ -66,9 +66,9 @@ static void print_binary_buffer(char *buf, unsigned long size) |
66 | |
66 | |
67 | html("<table summary='blob content' class='bin-blob'>\n"); |
67 | html("<table summary='blob content' class='bin-blob'>\n"); |
68 | html("<tr><th>ofs</th><th>hex dump</th><th>ascii</th></tr>"); |
68 | html("<tr><th>ofs</th><th>hex dump</th><th>ascii</th></tr>"); |
69 | for (ofs = 0; ofs < size; ofs += ROWLEN, buf += ROWLEN) { |
69 | for (ofs = 0; ofs < size; ofs += ROWLEN, buf += ROWLEN) { |
70 | htmlf("<tr><td class='right'>%04x</td><td class='hex'>", ofs); |
70 | htmlf("<tr><td class='right'>%04lx</td><td class='hex'>", ofs); |
71 | for (idx = 0; idx < ROWLEN && ofs + idx < size; idx++) |
71 | for (idx = 0; idx < ROWLEN && ofs + idx < size; idx++) |
72 | htmlf("%*s%02x", |
72 | htmlf("%*s%02x", |
73 | idx == 16 ? 4 : 1, "", |
73 | idx == 16 ? 4 : 1, "", |
74 | buf[idx] & 0xff); |
74 | buf[idx] & 0xff); |
@@ -101,12 +101,18 @@ static void print_object(const unsigned char *sha1, char *path, const char *base |
101 | sha1_to_hex(sha1))); |
101 | sha1_to_hex(sha1))); |
102 | return; |
102 | return; |
103 | } |
103 | } |
104 | |
104 | |
105 | html(" ("); |
105 | htmlf("blob: %s (", sha1_to_hex(sha1)); |
106 | cgit_plain_link("plain", NULL, NULL, ctx.qry.head, |
106 | cgit_plain_link("plain", NULL, NULL, ctx.qry.head, |
107 | curr_rev, path); |
107 | curr_rev, path); |
108 | htmlf(")<br/>blob: %s\n", sha1_to_hex(sha1)); |
108 | html(")\n"); |
| |
109 | |
| |
110 | if (ctx.cfg.max_blob_size && size / 1024 > ctx.cfg.max_blob_size) { |
| |
111 | htmlf("<div class='error'>blob size (%ldKB) exceeds display size limit (%dKB).</div>", |
| |
112 | size / 1024, ctx.cfg.max_blob_size); |
| |
113 | return; |
| |
114 | } |
109 | |
115 | |
110 | if (buffer_is_binary(buf, size)) |
116 | if (buffer_is_binary(buf, size)) |
111 | print_binary_buffer(buf, size); |
117 | print_binary_buffer(buf, size); |
112 | else |
118 | else |
@@ -168,8 +174,10 @@ static int ls_item(const unsigned char *sha1, const char *base, int baselen, |
168 | fullpath, 0, NULL, NULL, ctx.qry.showmsg); |
174 | fullpath, 0, NULL, NULL, ctx.qry.showmsg); |
169 | if (ctx.repo->max_stats) |
175 | if (ctx.repo->max_stats) |
170 | cgit_stats_link("stats", NULL, "button", ctx.qry.head, |
176 | cgit_stats_link("stats", NULL, "button", ctx.qry.head, |
171 | fullpath); |
177 | fullpath); |
| |
178 | cgit_plain_link("plain", NULL, "button", ctx.qry.head, curr_rev, |
| |
179 | fullpath); |
172 | html("</td></tr>\n"); |
180 | html("</td></tr>\n"); |
173 | free(name); |
181 | free(name); |
174 | return 0; |
182 | return 0; |
175 | } |
183 | } |
@@ -216,19 +224,12 @@ static int walk_tree(const unsigned char *sha1, const char *base, int baselen, |
216 | void *cbdata) |
224 | void *cbdata) |
217 | { |
225 | { |
218 | static int state; |
226 | static int state; |
219 | static char buffer[PATH_MAX]; |
227 | static char buffer[PATH_MAX]; |
220 | char *url; |
| |
221 | |
228 | |
222 | if (state == 0) { |
229 | if (state == 0) { |
223 | memcpy(buffer, base, baselen); |
230 | memcpy(buffer, base, baselen); |
224 | strcpy(buffer+baselen, pathname); |
231 | strcpy(buffer+baselen, pathname); |
225 | url = cgit_pageurl(ctx.qry.repo, "tree", |
| |
226 | fmt("h=%s&path=%s", curr_rev, buffer)); |
| |
227 | html("/"); |
| |
228 | cgit_tree_link(xstrdup(pathname), NULL, NULL, ctx.qry.head, |
| |
229 | curr_rev, buffer); |
| |
230 | |
| |
231 | if (strcmp(match_path, buffer)) |
232 | if (strcmp(match_path, buffer)) |
232 | return READ_TREE_RECURSIVE; |
233 | return READ_TREE_RECURSIVE; |
233 | |
234 | |
234 | if (S_ISDIR(mode)) { |
235 | if (S_ISDIR(mode)) { |
@@ -269,12 +270,8 @@ void cgit_print_tree(const char *rev, char *path) |
269 | cgit_print_error(fmt("Invalid commit reference: %s", rev)); |
270 | cgit_print_error(fmt("Invalid commit reference: %s", rev)); |
270 | return; |
271 | return; |
271 | } |
272 | } |
272 | |
273 | |
273 | html("path: <a href='"); |
| |
274 | html_attr(cgit_pageurl(ctx.qry.repo, "tree", fmt("h=%s", rev))); |
| |
275 | html("'>root</a>"); |
| |
276 | |
| |
277 | if (path == NULL) { |
274 | if (path == NULL) { |
278 | ls_tree(commit->tree->object.sha1, NULL); |
275 | ls_tree(commit->tree->object.sha1, NULL); |
279 | return; |
276 | return; |
280 | } |
277 | } |
|