Add ui-commit.c + misc ui cleanups
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
This commit is contained in:
parent
2101e26fd6
commit
9a8f88658d
2
Makefile
2
Makefile
@ -6,7 +6,7 @@ CACHE_ROOT = /var/cache/cgit
|
||||
|
||||
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 \
|
||||
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
|
||||
|
||||
|
2
cgit.c
2
cgit.c
@ -32,6 +32,8 @@ static void cgit_print_repo_page(struct cacheitem *item)
|
||||
cgit_print_log(cgit_query_head, cgit_query_ofs, 100);
|
||||
} else if (!strcmp(cgit_query_page, "tree")) {
|
||||
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")) {
|
||||
cgit_print_view(cgit_query_sha1);
|
||||
}
|
||||
|
50
cgit.css
50
cgit.css
@ -21,16 +21,15 @@ table.list {
|
||||
}
|
||||
|
||||
table.list th {
|
||||
text-align: left;
|
||||
font-weight: bold;
|
||||
background: #ddd;
|
||||
border-bottom: solid 1px #aaa;
|
||||
padding: 0.1em 0.5em 0.1em;
|
||||
padding: 0.1em 0.5em 0.1em 0.5em;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
table.list td {
|
||||
border: none;
|
||||
padding: 0.1em 1em 0.1em 0.5em;
|
||||
padding: 0.1em 0.5em 0.1em 0.5em;
|
||||
background: white;
|
||||
}
|
||||
|
||||
@ -56,6 +55,10 @@ div#content {
|
||||
margin: 0.5em 0.5em;
|
||||
}
|
||||
|
||||
div#blob {
|
||||
border: solid 1px black;
|
||||
}
|
||||
|
||||
div.error {
|
||||
color: red;
|
||||
font-weight: bold;
|
||||
@ -75,4 +78,43 @@ td.blob {
|
||||
white-space: pre;
|
||||
font-family: courier;
|
||||
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
5
cgit.h
@ -92,7 +92,8 @@ extern void cgit_print_pageheader(char *title);
|
||||
extern void cgit_print_repolist(struct cacheitem *item);
|
||||
extern void cgit_print_summary();
|
||||
extern void cgit_print_log(const char *tip, int ofs, int cnt);
|
||||
extern void cgit_print_view(char *hex);
|
||||
extern void cgit_print_tree(const char *sha1);
|
||||
extern void cgit_print_view(const char *hex);
|
||||
extern void cgit_print_tree(const char *hex);
|
||||
extern void cgit_print_commit(const char *hex);
|
||||
|
||||
#endif /* CGIT_H */
|
||||
|
@ -150,6 +150,7 @@ struct commitinfo *cgit_parse_commit(struct commit *commit)
|
||||
|
||||
t = strchr(p, '\n');
|
||||
ret->subject = substr(p, t);
|
||||
p = t + 1;
|
||||
|
||||
while (*p == '\n')
|
||||
p = strchr(p, '\n') + 1;
|
||||
|
80
ui-commit.c
Normal file
80
ui-commit.c
Normal 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);
|
||||
}
|
11
ui-log.c
11
ui-log.c
@ -21,17 +21,12 @@ void print_commit(struct commit *commit)
|
||||
html_txt(buf);
|
||||
html("</td><td>");
|
||||
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_txt(info->subject);
|
||||
html_link_close();
|
||||
html("</td><td>");
|
||||
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");
|
||||
free(info->author);
|
||||
free(info->committer);
|
||||
@ -56,8 +51,8 @@ void cgit_print_log(const char *tip, int ofs, int cnt)
|
||||
prepare_revision_walk(&rev);
|
||||
|
||||
html("<h2>Log</h2>");
|
||||
html("<table class='list'>");
|
||||
html("<tr><th>Date</th><th>Message</th><th>Author</th><th>Link</th></tr>\n");
|
||||
html("<table class='list log'>");
|
||||
html("<tr><th class='left'>Date</th><th class='left'>Message</th><th class='left'>Author</th></tr>\n");
|
||||
|
||||
if (ofs<0)
|
||||
ofs = 0;
|
||||
|
@ -62,9 +62,9 @@ void cgit_print_tree(const char *hex)
|
||||
|
||||
html("<h2>Tree content</h2>\n");
|
||||
html("<table class='list'>\n");
|
||||
html("<tr><th>Name</th>");
|
||||
html("<th class='filesize'>Size</th>");
|
||||
html("<th class='filemode'>Mode</th></tr>\n");
|
||||
html("<tr><th class='left'>Name</th>");
|
||||
html("<th class='right'>Size</th>");
|
||||
html("<th class='right'>Mode</th></tr>\n");
|
||||
read_tree_recursive(tree, "", 0, 1, NULL, print_entry);
|
||||
html("</table>\n");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user