summaryrefslogtreecommitdiffabout
path: root/ui-tree.c
Unidiff
Diffstat (limited to 'ui-tree.c') (more/less context) (ignore whitespace changes)
-rw-r--r--ui-tree.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/ui-tree.c b/ui-tree.c
index f53ab64..a164767 100644
--- a/ui-tree.c
+++ b/ui-tree.c
@@ -187,99 +187,99 @@ static void ls_head()
187} 187}
188 188
189static void ls_tail() 189static void ls_tail()
190{ 190{
191 if (!header) 191 if (!header)
192 return; 192 return;
193 html("</table>\n"); 193 html("</table>\n");
194 header = 0; 194 header = 0;
195} 195}
196 196
197static void ls_tree(const unsigned char *sha1, char *path) 197static void ls_tree(const unsigned char *sha1, char *path)
198{ 198{
199 struct tree *tree; 199 struct tree *tree;
200 200
201 tree = parse_tree_indirect(sha1); 201 tree = parse_tree_indirect(sha1);
202 if (!tree) { 202 if (!tree) {
203 cgit_print_error(fmt("Not a tree object: %s", 203 cgit_print_error(fmt("Not a tree object: %s",
204 sha1_to_hex(sha1))); 204 sha1_to_hex(sha1)));
205 return; 205 return;
206 } 206 }
207 207
208 ls_head(); 208 ls_head();
209 read_tree_recursive(tree, "", 0, 1, NULL, ls_item, NULL); 209 read_tree_recursive(tree, "", 0, 1, NULL, ls_item, NULL);
210 ls_tail(); 210 ls_tail();
211} 211}
212 212
213 213
214static int walk_tree(const unsigned char *sha1, const char *base, int baselen, 214static int walk_tree(const unsigned char *sha1, const char *base, int baselen,
215 const char *pathname, unsigned mode, int stage, 215 const char *pathname, unsigned mode, int stage,
216 void *cbdata) 216 void *cbdata)
217{ 217{
218 static int state; 218 static int state;
219 static char buffer[PATH_MAX]; 219 static char buffer[PATH_MAX];
220 char *url; 220 char *url;
221 221
222 if (state == 0) { 222 if (state == 0) {
223 memcpy(buffer, base, baselen); 223 memcpy(buffer, base, baselen);
224 strcpy(buffer+baselen, pathname); 224 strcpy(buffer+baselen, pathname);
225 url = cgit_pageurl(ctx.qry.repo, "tree", 225 url = cgit_pageurl(ctx.qry.repo, "tree",
226 fmt("h=%s&amp;path=%s", curr_rev, buffer)); 226 fmt("h=%s&amp;path=%s", curr_rev, buffer));
227 html("/"); 227 html("/");
228 cgit_tree_link(xstrdup(pathname), NULL, NULL, ctx.qry.head, 228 cgit_tree_link(xstrdup(pathname), NULL, NULL, ctx.qry.head,
229 curr_rev, buffer); 229 curr_rev, buffer);
230 230
231 if (strcmp(match_path, buffer)) 231 if (strcmp(match_path, buffer))
232 return READ_TREE_RECURSIVE; 232 return READ_TREE_RECURSIVE;
233 233
234 if (S_ISDIR(mode)) { 234 if (S_ISDIR(mode)) {
235 state = 1; 235 state = 1;
236 ls_head(); 236 ls_head();
237 return READ_TREE_RECURSIVE; 237 return READ_TREE_RECURSIVE;
238 } else { 238 } else {
239 print_object(sha1, buffer, pathname); 239 print_object(sha1, buffer, pathname);
240 return 0; 240 return 0;
241 } 241 }
242 } 242 }
243 ls_item(sha1, base, baselen, pathname, mode, stage, NULL); 243 ls_item(sha1, base, baselen, pathname, mode, stage, NULL);
244 return 0; 244 return 0;
245} 245}
246 246
247 247
248/* 248/*
249 * Show a tree or a blob 249 * Show a tree or a blob
250 * rev: the commit pointing at the root tree object 250 * rev: the commit pointing at the root tree object
251 * path: path to tree or blob 251 * path: path to tree or blob
252 */ 252 */
253void cgit_print_tree(const char *rev, char *path) 253void cgit_print_tree(const char *rev, char *path)
254{ 254{
255 unsigned char sha1[20]; 255 unsigned char sha1[20];
256 struct commit *commit; 256 struct commit *commit;
257 const char *paths[] = {path, NULL}; 257 const char *paths[] = {path, NULL};
258 258
259 if (!rev) 259 if (!rev)
260 rev = ctx.qry.head; 260 rev = ctx.qry.head;
261 261
262 curr_rev = xstrdup(rev); 262 curr_rev = xstrdup(rev);
263 if (get_sha1(rev, sha1)) { 263 if (get_sha1(rev, sha1)) {
264 cgit_print_error(fmt("Invalid revision name: %s", rev)); 264 cgit_print_error(fmt("Invalid revision name: %s", rev));
265 return; 265 return;
266 } 266 }
267 commit = lookup_commit_reference(sha1); 267 commit = lookup_commit_reference(sha1);
268 if (!commit || parse_commit(commit)) { 268 if (!commit || parse_commit(commit)) {
269 cgit_print_error(fmt("Invalid commit reference: %s", rev)); 269 cgit_print_error(fmt("Invalid commit reference: %s", rev));
270 return; 270 return;
271 } 271 }
272 272
273 html("path: <a href='"); 273 html("path: <a href='");
274 html_attr(cgit_pageurl(ctx.qry.repo, "tree", fmt("h=%s", rev))); 274 html_attr(cgit_pageurl(ctx.qry.repo, "tree", fmt("h=%s", rev)));
275 html("'>root</a>"); 275 html("'>root</a>");
276 276
277 if (path == NULL) { 277 if (path == NULL) {
278 ls_tree(commit->tree->object.sha1, NULL); 278 ls_tree(commit->tree->object.sha1, NULL);
279 return; 279 return;
280 } 280 }
281 281
282 match_path = path; 282 match_path = path;
283 read_tree_recursive(commit->tree, NULL, 0, 0, paths, walk_tree, NULL); 283 read_tree_recursive(commit->tree, "", 0, 0, paths, walk_tree, NULL);
284 ls_tail(); 284 ls_tail();
285} 285}