X-Git-Url: https://gitweb.ps.run/ps-cgit/blobdiff_plain/8a3685bcf2612206fc24a2421acb53dd83aeab85..57f6a8bf0de6c112cabc1d8e20ade2698bd886b7:/ui-commit.c diff --git a/ui-commit.c b/ui-commit.c index ce33cf9..59eeb1d 100644 --- a/ui-commit.c +++ b/ui-commit.c @@ -8,11 +8,11 @@ #include "cgit.h" -int files = 0, slots = 0; -int total_adds = 0, total_rems = 0, max_changes = 0; -int lines_added, lines_removed; +static int files, slots; +static int total_adds, total_rems, max_changes; +static int lines_added, lines_removed; -struct fileinfo { +static struct fileinfo { char status; unsigned char old_sha1[20]; unsigned char new_sha1[20]; @@ -29,7 +29,6 @@ void print_fileinfo(struct fileinfo *info) { char *query, *query2; char *class; - double width; switch (info->status) { case DIFF_STATUS_ADDED: @@ -76,8 +75,8 @@ void print_fileinfo(struct fileinfo *info) html("]"); } htmlf("", class); - query = fmt("id=%s&id2=%s", sha1_to_hex(info->old_sha1), - sha1_to_hex(info->new_sha1)); + query = fmt("id=%s&id2=%s&path=%s", sha1_to_hex(info->old_sha1), + sha1_to_hex(info->new_sha1), info->new_path); html_link_open(cgit_pageurl(cgit_query_repo, "diff", query), NULL, NULL); if (info->status == DIFF_STATUS_COPIED || @@ -96,18 +95,15 @@ void print_fileinfo(struct fileinfo *info) } html(""); htmlf("%d", info->added + info->removed); - html(""); - width = (info->added + info->removed) * 100.0 / max_changes; - if (width < 0.1) - width = 0.1; - html_link_open(cgit_pageurl(cgit_query_repo, "diff", query), - NULL, NULL); - htmlf("", - info->added * width / (info->added + info->removed)); - htmlf("", - info->removed * width / (info->added + info->removed)); - html("\n"); + htmlf("", (max_changes > 100 ? 100 : max_changes)); + htmlf("
", + info->added * 100.0 / max_changes); + htmlf("", + info->removed * 100.0 / max_changes); + htmlf("", + (max_changes - info->removed - info->added) * 100.0 / max_changes); + html("
\n"); } void cgit_count_diff_lines(char *line, int len) @@ -151,7 +147,7 @@ void inspect_filepair(struct diff_filepair *pair) void cgit_print_commit(const char *hex) { - struct commit *commit; + struct commit *commit, *parent; struct commitinfo *info; struct commit_list *p; unsigned char sha1[20]; @@ -176,27 +172,39 @@ void cgit_print_commit(const char *hex) html(" "); html_txt(info->author_email); html(""); - cgit_print_date(info->author_date); + cgit_print_date(info->author_date, FMT_LONGDATE); html("\n"); html("committer"); html_txt(info->committer); html(" "); html_txt(info->committer_email); html(""); - cgit_print_date(info->committer_date); + cgit_print_date(info->committer_date, FMT_LONGDATE); html("\n"); html("tree%s\n", sha1_to_hex(commit->tree->object.sha1)); for (p = commit->parents; p ; p = p->next) { + parent = lookup_commit_reference(p->item->object.sha1); + if (!parent) { + html(""); + cgit_print_error("Error reading parent commit"); + html(""); + continue; + } html("parent" "" "%s\n", + htmlf("'>%s (diff)"); } if (cgit_repo->snapshots) { htmlf("downloadDiffstat"); html(""); max_changes = 0; cgit_diff_commit(commit, inspect_filepair); @@ -220,8 +229,11 @@ void cgit_print_commit(const char *hex) print_fileinfo(&items[i]); html("
"); html("
"); - htmlf("%d files changed, %d insertions, %d deletions\n", + htmlf("%d files changed, %d insertions, %d deletions (", files, total_adds, total_rems); + query = fmt("h=%s", hex); + html_link_open(cgit_pageurl(cgit_query_repo, "diff", query), NULL, NULL); + html("show diff)"); html("
"); } cgit_free_commitinfo(info);