Add ui-commit.c + misc ui cleanups

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
This commit is contained in:
Lars Hjemli 2006-12-16 00:19:56 +01:00
parent 2101e26fd6
commit 9a8f88658d
9 changed files with 140 additions and 19 deletions

View File

@ -6,7 +6,7 @@ CACHE_ROOT = /var/cache/cgit
EXTLIBS = ../git/libgit.a ../git/xdiff/lib.a -lz -lcrypto EXTLIBS = ../git/libgit.a ../git/xdiff/lib.a -lz -lcrypto
OBJECTS = shared.o cache.o parsing.o html.o ui-shared.o ui-repolist.o \ OBJECTS = shared.o cache.o parsing.o html.o ui-shared.o ui-repolist.o \
ui-summary.o ui-log.o ui-view.c ui-tree.c ui-summary.o ui-log.o ui-view.c ui-tree.c ui-commit.c
CFLAGS += -Wall CFLAGS += -Wall

2
cgit.c
View File

@ -32,6 +32,8 @@ static void cgit_print_repo_page(struct cacheitem *item)
cgit_print_log(cgit_query_head, cgit_query_ofs, 100); cgit_print_log(cgit_query_head, cgit_query_ofs, 100);
} else if (!strcmp(cgit_query_page, "tree")) { } else if (!strcmp(cgit_query_page, "tree")) {
cgit_print_tree(cgit_query_sha1); cgit_print_tree(cgit_query_sha1);
} else if (!strcmp(cgit_query_page, "commit")) {
cgit_print_commit(cgit_query_sha1);
} else if (!strcmp(cgit_query_page, "view")) { } else if (!strcmp(cgit_query_page, "view")) {
cgit_print_view(cgit_query_sha1); cgit_print_view(cgit_query_sha1);
} }

View File

@ -21,16 +21,15 @@ table.list {
} }
table.list th { table.list th {
text-align: left;
font-weight: bold; font-weight: bold;
background: #ddd; background: #ddd;
border-bottom: solid 1px #aaa; border-bottom: solid 1px #aaa;
padding: 0.1em 0.5em 0.1em; padding: 0.1em 0.5em 0.1em 0.5em;
vertical-align: baseline; vertical-align: baseline;
} }
table.list td { table.list td {
border: none; border: none;
padding: 0.1em 1em 0.1em 0.5em; padding: 0.1em 0.5em 0.1em 0.5em;
background: white; background: white;
} }
@ -56,6 +55,10 @@ div#content {
margin: 0.5em 0.5em; margin: 0.5em 0.5em;
} }
div#blob {
border: solid 1px black;
}
div.error { div.error {
color: red; color: red;
font-weight: bold; font-weight: bold;
@ -76,3 +79,42 @@ td.blob {
font-family: courier; font-family: courier;
font-size: 100%; font-size: 100%;
} }
table.log td {
white-space: nowrap;
}
table.commit-info {
border-collapse: collapse;
margin-top: 1em;
}
table.commit-info th {
text-align: left;
font-weight: normal;
padding: 0.1em 1em 0.1em 0.1em;
}
table.commit-info td {
font-weight: normal;
padding: 0.1em 1em 0.1em 0.1em;
}
div.commit-subject {
font-weight: bold;
font-size: 110%;
margin: 1em 0em 1em;
}
div.commit-msg {
white-space: pre;
font-family: courier;
font-size: 100%;
}
.sha1 {
font-family: courier;
font-size: 90%;
}
.left {
text-align: left;
}
.right {
text-align: right;
}

5
cgit.h
View File

@ -92,7 +92,8 @@ extern void cgit_print_pageheader(char *title);
extern void cgit_print_repolist(struct cacheitem *item); extern void cgit_print_repolist(struct cacheitem *item);
extern void cgit_print_summary(); extern void cgit_print_summary();
extern void cgit_print_log(const char *tip, int ofs, int cnt); extern void cgit_print_log(const char *tip, int ofs, int cnt);
extern void cgit_print_view(char *hex); extern void cgit_print_view(const char *hex);
extern void cgit_print_tree(const char *sha1); extern void cgit_print_tree(const char *hex);
extern void cgit_print_commit(const char *hex);
#endif /* CGIT_H */ #endif /* CGIT_H */

View File

@ -150,6 +150,7 @@ struct commitinfo *cgit_parse_commit(struct commit *commit)
t = strchr(p, '\n'); t = strchr(p, '\n');
ret->subject = substr(p, t); ret->subject = substr(p, t);
p = t + 1;
while (*p == '\n') while (*p == '\n')
p = strchr(p, '\n') + 1; p = strchr(p, '\n') + 1;

80
ui-commit.c Normal file
View File

@ -0,0 +1,80 @@
#include "cgit.h"
void cgit_print_date(unsigned long secs)
{
char buf[32];
struct tm *time;
time = gmtime(&secs);
strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", time);
html_txt(buf);
}
void cgit_print_commit(const char *hex)
{
struct commit *commit;
struct commitinfo *info;
struct commit_list *p;
unsigned long size;
char type[20];
char *buf;
unsigned char sha1[20];
if (get_sha1(hex, sha1)) {
cgit_print_error(fmt("Bad object id: %s", hex));
return;
}
buf = read_sha1_file(sha1, type, &size);
if (!buf) {
cgit_print_error(fmt("Bad object reference: %s", hex));
return;
}
commit = lookup_commit(sha1);
if (!commit) {
cgit_print_error(fmt("Bad commit reference: %s", hex));
return;
}
commit->buffer = buf;
if (parse_commit_buffer(commit, buf, size)) {
cgit_print_error(fmt("Malformed commit buffer: %s", hex));
return;
}
info = cgit_parse_commit(commit);
html("<table class='commit-info'>\n");
html("<tr><th>author</th><td colspan='2'>");
html_txt(info->author);
html("</td></tr>\n");
html("<tr><th>committer</th><td>");
html_txt(info->committer);
html("</td><td class='right'>");
cgit_print_date(commit->date);
html("</td></tr>\n");
html("<tr><th>tree</th><td colspan='2' class='sha1'><a href='");
html_attr(cgit_pageurl(cgit_query_repo, "tree", fmt("id=%s", sha1_to_hex(commit->tree->object.sha1))));
htmlf("'>%s</a></td></tr>\n", sha1_to_hex(commit->tree->object.sha1));
for (p = commit->parents; p ; p = p->next) {
html("<tr><th>parent</th><td colspan='2' class='sha1'><a href='");
html_attr(cgit_pageurl(cgit_query_repo, "commit", fmt("id=%s", sha1_to_hex(p->item->object.sha1))));
htmlf("'>%s</a></td></tr>\n",
sha1_to_hex(p->item->object.sha1));
}
html("</table>\n");
html("<div class='commit-subject'>");
html_txt(info->subject);
html("</div>");
html("<div class='commit-msg'>");
html_txt(info->msg);
html("</div>");
free(info->author);
free(info->committer);
free(info->subject);
free(info);
}

View File

@ -21,17 +21,12 @@ void print_commit(struct commit *commit)
html_txt(buf); html_txt(buf);
html("</td><td>"); html("</td><td>");
char *qry = fmt("id=%s", sha1_to_hex(commit->object.sha1)); char *qry = fmt("id=%s", sha1_to_hex(commit->object.sha1));
char *url = cgit_pageurl(cgit_query_repo, "view", qry); char *url = cgit_pageurl(cgit_query_repo, "commit", qry);
html_link_open(url, NULL, NULL); html_link_open(url, NULL, NULL);
html_txt(info->subject); html_txt(info->subject);
html_link_close(); html_link_close();
html("</td><td>"); html("</td><td>");
html_txt(info->author); html_txt(info->author);
html("</td><td><a href='");
html_attr(cgit_pageurl(cgit_query_repo, "tree",
fmt("id=%s",
sha1_to_hex(commit->tree->object.sha1))));
html("'>tree</a>");
html("</td></tr>\n"); html("</td></tr>\n");
free(info->author); free(info->author);
free(info->committer); free(info->committer);
@ -56,8 +51,8 @@ void cgit_print_log(const char *tip, int ofs, int cnt)
prepare_revision_walk(&rev); prepare_revision_walk(&rev);
html("<h2>Log</h2>"); html("<h2>Log</h2>");
html("<table class='list'>"); html("<table class='list log'>");
html("<tr><th>Date</th><th>Message</th><th>Author</th><th>Link</th></tr>\n"); html("<tr><th class='left'>Date</th><th class='left'>Message</th><th class='left'>Author</th></tr>\n");
if (ofs<0) if (ofs<0)
ofs = 0; ofs = 0;

View File

@ -62,9 +62,9 @@ void cgit_print_tree(const char *hex)
html("<h2>Tree content</h2>\n"); html("<h2>Tree content</h2>\n");
html("<table class='list'>\n"); html("<table class='list'>\n");
html("<tr><th>Name</th>"); html("<tr><th class='left'>Name</th>");
html("<th class='filesize'>Size</th>"); html("<th class='right'>Size</th>");
html("<th class='filemode'>Mode</th></tr>\n"); html("<th class='right'>Mode</th></tr>\n");
read_tree_recursive(tree, "", 0, 1, NULL, print_entry); read_tree_recursive(tree, "", 0, 1, NULL, print_entry);
html("</table>\n"); html("</table>\n");
} }

View File

@ -8,7 +8,7 @@
#include "cgit.h" #include "cgit.h"
void cgit_print_view(char *hex) void cgit_print_view(const char *hex)
{ {
unsigned char sha1[20]; unsigned char sha1[20];
char type[20]; char type[20];