|
diff --git a/ui-tree.c b/ui-tree.c index a164767..0b1b531 100644 --- a/ ui-tree.c+++ b/ ui-tree.c |
|
@@ -43,13 +43,13 @@ static void print_text_buffer(const char *name, char *buf, unsigned long size) |
43 | } |
43 | } |
44 | |
44 | |
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 | } |
54 | |
54 | |
55 | html("<td class='lines'><pre><code>"); |
55 | html("<td class='lines'><pre><code>"); |
@@ -64,13 +64,13 @@ static void print_binary_buffer(char *buf, unsigned long size) |
64 | unsigned long ofs, idx; |
64 | unsigned long ofs, idx; |
65 | static char ascii[ROWLEN + 1]; |
65 | static char ascii[ROWLEN + 1]; |
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); |
75 | html(" </td><td class='hex'>"); |
75 | html(" </td><td class='hex'>"); |
76 | for (idx = 0; idx < ROWLEN && ofs + idx < size; idx++) |
76 | for (idx = 0; idx < ROWLEN && ofs + idx < size; idx++) |
@@ -99,16 +99,22 @@ static void print_object(const unsigned char *sha1, char *path, const char *base |
99 | if (!buf) { |
99 | if (!buf) { |
100 | cgit_print_error(fmt("Error reading object %s", |
100 | cgit_print_error(fmt("Error reading object %s", |
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 |
113 | print_text_buffer(basename, buf, size); |
119 | print_text_buffer(basename, buf, size); |
114 | } |
120 | } |
@@ -166,12 +172,14 @@ static int ls_item(const unsigned char *sha1, const char *base, int baselen, |
166 | html("<td>"); |
172 | html("<td>"); |
167 | cgit_log_link("log", NULL, "button", ctx.qry.head, curr_rev, |
173 | cgit_log_link("log", NULL, "button", ctx.qry.head, curr_rev, |
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 | } |
176 | |
184 | |
177 | static void ls_head() |
185 | static void ls_head() |
@@ -214,23 +222,16 @@ static void ls_tree(const unsigned char *sha1, char *path) |
214 | static int walk_tree(const unsigned char *sha1, const char *base, int baselen, |
222 | static int walk_tree(const unsigned char *sha1, const char *base, int baselen, |
215 | const char *pathname, unsigned mode, int stage, |
223 | const char *pathname, unsigned mode, int stage, |
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)) { |
235 | state = 1; |
236 | state = 1; |
236 | ls_head(); |
237 | ls_head(); |
@@ -267,16 +268,12 @@ void cgit_print_tree(const char *rev, char *path) |
267 | commit = lookup_commit_reference(sha1); |
268 | commit = lookup_commit_reference(sha1); |
268 | if (!commit || parse_commit(commit)) { |
269 | if (!commit || parse_commit(commit)) { |
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 | } |
281 | |
278 | |
282 | match_path = path; |
279 | match_path = path; |
|