Add ui-commit.c + misc ui cleanups
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
This commit is contained in:
rodzic
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
|
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
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);
|
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);
|
||||||
}
|
}
|
||||||
|
48
cgit.css
48
cgit.css
@ -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
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_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 */
|
||||||
|
@ -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
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_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;
|
||||||
|
@ -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");
|
||||||
}
|
}
|
||||||
|
@ -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];
|
||||||
|
Ładowanie…
Reference in New Issue
Block a user