} else if (S_ISDIR(mode)) {
html("class='ls-dir'><a href='");
html_attr(cgit_pageurl(cgit_query_repo, "tree",
- fmt("h=%s&id=%s&path=%s%s/",
+ fmt("h=%s&id=%s&path=%s%s/",
curr_rev,
sha1_to_hex(sha1),
cgit_query_path ? cgit_query_path : "",
} else {
html("class='ls-blob'><a href='");
html_attr(cgit_pageurl(cgit_query_repo, "view",
- fmt("h=%s&id=%s&path=%s%s", curr_rev,
+ fmt("h=%s&id=%s&path=%s%s", curr_rev,
sha1_to_hex(sha1),
cgit_query_path ? cgit_query_path : "",
pathname)));
}
- htmlf("'>%s</a></div></td>", name);
+ htmlf("'>%s</a></td>", name);
htmlf("<td class='filesize'>%li</td>", size);
html("<td class='links'><a href='");
html_attr(cgit_pageurl(cgit_query_repo, "log",
- fmt("h=%s&path=%s%s",
+ fmt("h=%s&path=%s%s",
curr_rev,
cgit_query_path ? cgit_query_path : "",
pathname)));
{
struct tree *tree;
unsigned char sha1[20];
+ struct commit *commit;
curr_rev = xstrdup(rev);
+ get_sha1(rev, sha1);
+ commit = lookup_commit_reference(sha1);
+ if (!commit || parse_commit(commit)) {
+ cgit_print_error(fmt("Invalid head: %s", rev));
+ return;
+ }
+ if (!hex)
+ hex = sha1_to_hex(commit->tree->object.sha1);
+
if (get_sha1_hex(hex, sha1)) {
cgit_print_error(fmt("Invalid object id: %s", hex));
return;