summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--ui-tree.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/ui-tree.c b/ui-tree.c
index db63e13..032a966 100644
--- a/ui-tree.c
+++ b/ui-tree.c
@@ -24,71 +24,81 @@ static int print_entry(const unsigned char *sha1, const char *base,
24 htmlf("<tr><td colspan='3'>Bad object: %s %s</td></tr>", 24 htmlf("<tr><td colspan='3'>Bad object: %s %s</td></tr>",
25 name, 25 name,
26 sha1_to_hex(sha1)); 26 sha1_to_hex(sha1));
27 return 0; 27 return 0;
28 } 28 }
29 html("<tr><td class='filemode'>"); 29 html("<tr><td class='filemode'>");
30 html_filemode(mode); 30 html_filemode(mode);
31 html("</td><td "); 31 html("</td><td ");
32 if (S_ISDIRLNK(mode)) { 32 if (S_ISDIRLNK(mode)) {
33 htmlf("class='ls-mod'><a href='"); 33 htmlf("class='ls-mod'><a href='");
34 html_attr(fmt(cgit_repo->module_link, 34 html_attr(fmt(cgit_repo->module_link,
35 name, 35 name,
36 sha1_to_hex(sha1))); 36 sha1_to_hex(sha1)));
37 } else if (S_ISDIR(mode)) { 37 } else if (S_ISDIR(mode)) {
38 html("class='ls-dir'><a href='"); 38 html("class='ls-dir'><a href='");
39 html_attr(cgit_pageurl(cgit_query_repo, "tree", 39 html_attr(cgit_pageurl(cgit_query_repo, "tree",
40 fmt("h=%s&id=%s&path=%s%s/", 40 fmt("h=%s&id=%s&path=%s%s/",
41 curr_rev, 41 curr_rev,
42 sha1_to_hex(sha1), 42 sha1_to_hex(sha1),
43 cgit_query_path ? cgit_query_path : "", 43 cgit_query_path ? cgit_query_path : "",
44 pathname))); 44 pathname)));
45 } else { 45 } else {
46 html("class='ls-blob'><a href='"); 46 html("class='ls-blob'><a href='");
47 html_attr(cgit_pageurl(cgit_query_repo, "view", 47 html_attr(cgit_pageurl(cgit_query_repo, "view",
48 fmt("h=%s&id=%s&path=%s%s", curr_rev, 48 fmt("h=%s&id=%s&path=%s%s", curr_rev,
49 sha1_to_hex(sha1), 49 sha1_to_hex(sha1),
50 cgit_query_path ? cgit_query_path : "", 50 cgit_query_path ? cgit_query_path : "",
51 pathname))); 51 pathname)));
52 } 52 }
53 htmlf("'>%s</a></div></td>", name); 53 htmlf("'>%s</a></div></td>", name);
54 htmlf("<td class='filesize'>%li</td>", size); 54 htmlf("<td class='filesize'>%li</td>", size);
55 55
56 html("<td class='links'><a href='"); 56 html("<td class='links'><a href='");
57 html_attr(cgit_pageurl(cgit_query_repo, "log", 57 html_attr(cgit_pageurl(cgit_query_repo, "log",
58 fmt("h=%s&path=%s%s", 58 fmt("h=%s&path=%s%s",
59 curr_rev, 59 curr_rev,
60 cgit_query_path ? cgit_query_path : "", 60 cgit_query_path ? cgit_query_path : "",
61 pathname))); 61 pathname)));
62 html("'>history</a></td>"); 62 html("'>history</a></td>");
63 html("</tr>\n"); 63 html("</tr>\n");
64 free(name); 64 free(name);
65 return 0; 65 return 0;
66} 66}
67 67
68void cgit_print_tree(const char *rev, const char *hex, char *path) 68void cgit_print_tree(const char *rev, const char *hex, char *path)
69{ 69{
70 struct tree *tree; 70 struct tree *tree;
71 unsigned char sha1[20]; 71 unsigned char sha1[20];
72 struct commit *commit;
72 73
73 curr_rev = xstrdup(rev); 74 curr_rev = xstrdup(rev);
75 get_sha1(rev, sha1);
76 commit = lookup_commit_reference(sha1);
77 if (!commit || parse_commit(commit)) {
78 cgit_print_error(fmt("Invalid head: %s", rev));
79 return;
80 }
81 if (!hex)
82 hex = sha1_to_hex(commit->tree->object.sha1);
83
74 if (get_sha1_hex(hex, sha1)) { 84 if (get_sha1_hex(hex, sha1)) {
75 cgit_print_error(fmt("Invalid object id: %s", hex)); 85 cgit_print_error(fmt("Invalid object id: %s", hex));
76 return; 86 return;
77 } 87 }
78 tree = parse_tree_indirect(sha1); 88 tree = parse_tree_indirect(sha1);
79 if (!tree) { 89 if (!tree) {
80 cgit_print_error(fmt("Not a tree object: %s", hex)); 90 cgit_print_error(fmt("Not a tree object: %s", hex));
81 return; 91 return;
82 } 92 }
83 93
84 html_txt(path); 94 html_txt(path);
85 html("<table class='list'>\n"); 95 html("<table class='list'>\n");
86 html("<tr class='nohover'>"); 96 html("<tr class='nohover'>");
87 html("<th class='left'>Mode</th>"); 97 html("<th class='left'>Mode</th>");
88 html("<th class='left'>Name</th>"); 98 html("<th class='left'>Name</th>");
89 html("<th class='right'>Size</th>"); 99 html("<th class='right'>Size</th>");
90 html("<th/>"); 100 html("<th/>");
91 html("</tr>\n"); 101 html("</tr>\n");
92 read_tree_recursive(tree, "", 0, 1, NULL, print_entry); 102 read_tree_recursive(tree, "", 0, 1, NULL, print_entry);
93 html("</table>\n"); 103 html("</table>\n");
94} 104}