Diffstat (limited to 'ui-summary.c')
| -rw-r--r-- | ui-summary.c | 49 |
1 files changed, 39 insertions, 10 deletions
diff --git a/ui-summary.c b/ui-summary.c index de8a180..4bda4c2 100644 --- a/ui-summary.c +++ b/ui-summary.c @@ -15,10 +15,8 @@ static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1, { struct commit *commit; struct commitinfo *info; - char buf[256]; - char *ref; + char buf[256], *url; - ref = xstrdup(refname); strncpy(buf, refname, sizeof(buf)); commit = lookup_commit(sha1); // object is not really parsed at this point, because of some fallout @@ -27,13 +25,21 @@ static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1, if (commit && !parse_commit(commit)){ info = cgit_parse_commit(commit); html("<tr><td>"); - cgit_log_link(ref, NULL, NULL, ref, NULL, NULL, 0); + url = cgit_pageurl(cgit_query_repo, "log", + fmt("h=%s", refname)); + html_link_open(url, NULL, NULL); + html_txt(buf); + html_link_close(); html("</td><td>"); cgit_print_age(commit->date, -1, NULL); html("</td><td>"); html_txt(info->author); html("</td><td>"); - cgit_commit_link(info->subject, NULL, NULL, ref, NULL); + url = cgit_pageurl(cgit_query_repo, "commit", + fmt("h=%s", sha1_to_hex(sha1))); + html_link_open(url, NULL, NULL); + html_ntxt(cgit_max_msg_len, info->subject); + html_link_close(); html("</td></tr>\n"); cgit_free_commitinfo(info); } else { @@ -43,10 +49,33 @@ static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1, htmlf("*** bad ref %s ***", sha1_to_hex(sha1)); html("</td></tr>\n"); } - free(ref); return 0; } + +static void cgit_print_object_ref(struct object *obj) +{ + char *page, *arg, *url; + + if (obj->type == OBJ_COMMIT) { + page = "commit"; + arg = "h"; + } else if (obj->type == OBJ_TREE) { + page = "tree"; + arg = "id"; + } else { + page = "view"; + arg = "id"; + } + + url = cgit_pageurl(cgit_query_repo, page, + fmt("%s=%s", arg, sha1_to_hex(obj->sha1))); + html_link_open(url, NULL, NULL); + htmlf("%s %s", typename(obj->type), + sha1_to_hex(obj->sha1)); + html_link_close(); +} + static void print_tag_header() { html("<tr class='nohover'><th class='left'>Tag</th>" @@ -75,8 +104,8 @@ static int cgit_print_tag_cb(const char *refname, const unsigned char *sha1, if (!header) print_tag_header(); html("<tr><td>"); - url = cgit_pageurl(cgit_query_repo, "tag", - fmt("id=%s", refname)); + url = cgit_pageurl(cgit_query_repo, "view", + fmt("id=%s", sha1_to_hex(sha1))); html_link_open(url, NULL, NULL); html_txt(buf); html_link_close(); @@ -87,7 +116,7 @@ static int cgit_print_tag_cb(const char *refname, const unsigned char *sha1, if (info->tagger) html(info->tagger); html("</td><td>"); - cgit_object_link(tag->tagged); + cgit_print_object_ref(tag->tagged); html("</td></tr>\n"); } else { if (!header) @@ -95,7 +124,7 @@ static int cgit_print_tag_cb(const char *refname, const unsigned char *sha1, html("<tr><td>"); html_txt(buf); html("</td><td colspan='2'/><td>"); - cgit_object_link(obj); + cgit_print_object_ref(obj); html("</td></tr>\n"); } return 0; |