summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.h2
-rw-r--r--shared.c10
-rw-r--r--ui-commit.c5
-rw-r--r--ui-log.c5
-rw-r--r--ui-summary.c1
5 files changed, 15 insertions, 8 deletions
diff --git a/cgit.h b/cgit.h
index f06a941..02cc26a 100644
--- a/cgit.h
+++ b/cgit.h
@@ -44,48 +44,50 @@ extern int cgit_cache_repo_ttl;
44extern int cgit_cache_dynamic_ttl; 44extern int cgit_cache_dynamic_ttl;
45extern int cgit_cache_static_ttl; 45extern int cgit_cache_static_ttl;
46extern int cgit_cache_max_create_time; 46extern int cgit_cache_max_create_time;
47 47
48extern char *cgit_repo_name; 48extern char *cgit_repo_name;
49extern char *cgit_repo_desc; 49extern char *cgit_repo_desc;
50extern char *cgit_repo_owner; 50extern char *cgit_repo_owner;
51 51
52extern int cgit_query_has_symref; 52extern int cgit_query_has_symref;
53extern int cgit_query_has_sha1; 53extern int cgit_query_has_sha1;
54 54
55extern char *cgit_querystring; 55extern char *cgit_querystring;
56extern char *cgit_query_repo; 56extern char *cgit_query_repo;
57extern char *cgit_query_page; 57extern char *cgit_query_page;
58extern char *cgit_query_head; 58extern char *cgit_query_head;
59extern char *cgit_query_sha1; 59extern char *cgit_query_sha1;
60extern int cgit_query_ofs; 60extern int cgit_query_ofs;
61 61
62extern int htmlfd; 62extern int htmlfd;
63 63
64extern void cgit_global_config_cb(const char *name, const char *value); 64extern void cgit_global_config_cb(const char *name, const char *value);
65extern void cgit_repo_config_cb(const char *name, const char *value); 65extern void cgit_repo_config_cb(const char *name, const char *value);
66extern void cgit_querystring_cb(const char *name, const char *value); 66extern void cgit_querystring_cb(const char *name, const char *value);
67 67
68extern void *cgit_free_commitinfo(struct commitinfo *info);
69
68extern char *fmt(const char *format,...); 70extern char *fmt(const char *format,...);
69 71
70extern void html(const char *txt); 72extern void html(const char *txt);
71extern void htmlf(const char *format,...); 73extern void htmlf(const char *format,...);
72extern void html_txt(char *txt); 74extern void html_txt(char *txt);
73extern void html_attr(char *txt); 75extern void html_attr(char *txt);
74extern void html_link_open(char *url, char *title, char *class); 76extern void html_link_open(char *url, char *title, char *class);
75extern void html_link_close(void); 77extern void html_link_close(void);
76 78
77extern int cgit_read_config(const char *filename, configfn fn); 79extern int cgit_read_config(const char *filename, configfn fn);
78extern int cgit_parse_query(char *txt, configfn fn); 80extern int cgit_parse_query(char *txt, configfn fn);
79extern struct commitinfo *cgit_parse_commit(struct commit *commit); 81extern struct commitinfo *cgit_parse_commit(struct commit *commit);
80 82
81extern void cache_prepare(struct cacheitem *item); 83extern void cache_prepare(struct cacheitem *item);
82extern int cache_lock(struct cacheitem *item); 84extern int cache_lock(struct cacheitem *item);
83extern int cache_unlock(struct cacheitem *item); 85extern int cache_unlock(struct cacheitem *item);
84extern int cache_cancel_lock(struct cacheitem *item); 86extern int cache_cancel_lock(struct cacheitem *item);
85extern int cache_exist(struct cacheitem *item); 87extern int cache_exist(struct cacheitem *item);
86extern int cache_expired(struct cacheitem *item); 88extern int cache_expired(struct cacheitem *item);
87 89
88extern char *cgit_repourl(const char *reponame); 90extern char *cgit_repourl(const char *reponame);
89extern char *cgit_pageurl(const char *reponame, const char *pagename, 91extern char *cgit_pageurl(const char *reponame, const char *pagename,
90 const char *query); 92 const char *query);
91 93
diff --git a/shared.c b/shared.c
index 4574120..b576df8 100644
--- a/shared.c
+++ b/shared.c
@@ -67,24 +67,34 @@ void cgit_repo_config_cb(const char *name, const char *value)
67 cgit_repo_name = xstrdup(value); 67 cgit_repo_name = xstrdup(value);
68 else if (!strcmp(name, "desc")) 68 else if (!strcmp(name, "desc"))
69 cgit_repo_desc = xstrdup(value); 69 cgit_repo_desc = xstrdup(value);
70 else if (!strcmp(name, "owner")) 70 else if (!strcmp(name, "owner"))
71 cgit_repo_owner = xstrdup(value); 71 cgit_repo_owner = xstrdup(value);
72} 72}
73 73
74void cgit_querystring_cb(const char *name, const char *value) 74void cgit_querystring_cb(const char *name, const char *value)
75{ 75{
76 if (!strcmp(name,"r")) { 76 if (!strcmp(name,"r")) {
77 cgit_query_repo = xstrdup(value); 77 cgit_query_repo = xstrdup(value);
78 } else if (!strcmp(name, "p")) { 78 } else if (!strcmp(name, "p")) {
79 cgit_query_page = xstrdup(value); 79 cgit_query_page = xstrdup(value);
80 } else if (!strcmp(name, "h")) { 80 } else if (!strcmp(name, "h")) {
81 cgit_query_head = xstrdup(value); 81 cgit_query_head = xstrdup(value);
82 cgit_query_has_symref = 1; 82 cgit_query_has_symref = 1;
83 } else if (!strcmp(name, "id")) { 83 } else if (!strcmp(name, "id")) {
84 cgit_query_sha1 = xstrdup(value); 84 cgit_query_sha1 = xstrdup(value);
85 cgit_query_has_sha1 = 1; 85 cgit_query_has_sha1 = 1;
86 } else if (!strcmp(name, "ofs")) { 86 } else if (!strcmp(name, "ofs")) {
87 cgit_query_ofs = atoi(value); 87 cgit_query_ofs = atoi(value);
88 } 88 }
89} 89}
90 90
91void *cgit_free_commitinfo(struct commitinfo *info)
92{
93 free(info->author);
94 free(info->author_email);
95 free(info->committer);
96 free(info->committer_email);
97 free(info->subject);
98 free(info);
99 return NULL;
100}
diff --git a/ui-commit.c b/ui-commit.c
index b441e14..f654208 100644
--- a/ui-commit.c
+++ b/ui-commit.c
@@ -40,29 +40,26 @@ void cgit_print_commit(const char *hex)
40 html("<tr><th>committer</th><td>"); 40 html("<tr><th>committer</th><td>");
41 html_txt(info->committer); 41 html_txt(info->committer);
42 html(" "); 42 html(" ");
43 html_txt(info->committer_email); 43 html_txt(info->committer_email);
44 html("</td><td class='right'>"); 44 html("</td><td class='right'>");
45 cgit_print_date(info->committer_date); 45 cgit_print_date(info->committer_date);
46 html("</td></tr>\n"); 46 html("</td></tr>\n");
47 html("<tr><th>tree</th><td colspan='2' class='sha1'><a href='"); 47 html("<tr><th>tree</th><td colspan='2' class='sha1'><a href='");
48 html_attr(cgit_pageurl(cgit_query_repo, "tree", fmt("id=%s", sha1_to_hex(commit->tree->object.sha1)))); 48 html_attr(cgit_pageurl(cgit_query_repo, "tree", fmt("id=%s", sha1_to_hex(commit->tree->object.sha1))));
49 htmlf("'>%s</a></td></tr>\n", sha1_to_hex(commit->tree->object.sha1)); 49 htmlf("'>%s</a></td></tr>\n", sha1_to_hex(commit->tree->object.sha1));
50 50
51 for (p = commit->parents; p ; p = p->next) { 51 for (p = commit->parents; p ; p = p->next) {
52 html("<tr><th>parent</th><td colspan='2' class='sha1'><a href='"); 52 html("<tr><th>parent</th><td colspan='2' class='sha1'><a href='");
53 html_attr(cgit_pageurl(cgit_query_repo, "commit", fmt("id=%s", sha1_to_hex(p->item->object.sha1)))); 53 html_attr(cgit_pageurl(cgit_query_repo, "commit", fmt("id=%s", sha1_to_hex(p->item->object.sha1))));
54 htmlf("'>%s</a></td></tr>\n", 54 htmlf("'>%s</a></td></tr>\n",
55 sha1_to_hex(p->item->object.sha1)); 55 sha1_to_hex(p->item->object.sha1));
56 } 56 }
57 html("</table>\n"); 57 html("</table>\n");
58 html("<div class='commit-subject'>"); 58 html("<div class='commit-subject'>");
59 html_txt(info->subject); 59 html_txt(info->subject);
60 html("</div>"); 60 html("</div>");
61 html("<div class='commit-msg'>"); 61 html("<div class='commit-msg'>");
62 html_txt(info->msg); 62 html_txt(info->msg);
63 html("</div>"); 63 html("</div>");
64 free(info->author); 64 cgit_free_commitinfo(info);
65 free(info->committer);
66 free(info->subject);
67 free(info);
68} 65}
diff --git a/ui-log.c b/ui-log.c
index c52af79..b7da49f 100644
--- a/ui-log.c
+++ b/ui-log.c
@@ -7,52 +7,49 @@
7 */ 7 */
8 8
9#include "cgit.h" 9#include "cgit.h"
10 10
11void print_commit(struct commit *commit) 11void print_commit(struct commit *commit)
12{ 12{
13 char buf[32]; 13 char buf[32];
14 struct commitinfo *info; 14 struct commitinfo *info;
15 struct tm *time; 15 struct tm *time;
16 16
17 info = cgit_parse_commit(commit); 17 info = cgit_parse_commit(commit);
18 time = gmtime(&commit->date); 18 time = gmtime(&commit->date);
19 html("<tr><td>"); 19 html("<tr><td>");
20 strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", time); 20 strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", time);
21 html_txt(buf); 21 html_txt(buf);
22 html("</td><td>"); 22 html("</td><td>");
23 char *qry = fmt("id=%s", sha1_to_hex(commit->object.sha1)); 23 char *qry = fmt("id=%s", sha1_to_hex(commit->object.sha1));
24 char *url = cgit_pageurl(cgit_query_repo, "commit", qry); 24 char *url = cgit_pageurl(cgit_query_repo, "commit", qry);
25 html_link_open(url, NULL, NULL); 25 html_link_open(url, NULL, NULL);
26 html_txt(info->subject); 26 html_txt(info->subject);
27 html_link_close(); 27 html_link_close();
28 html("</td><td>"); 28 html("</td><td>");
29 html_txt(info->author); 29 html_txt(info->author);
30 html("</td></tr>\n"); 30 html("</td></tr>\n");
31 free(info->author); 31 cgit_free_commitinfo(info);
32 free(info->committer);
33 free(info->subject);
34 free(info);
35} 32}
36 33
37 34
38void cgit_print_log(const char *tip, int ofs, int cnt) 35void cgit_print_log(const char *tip, int ofs, int cnt)
39{ 36{
40 struct rev_info rev; 37 struct rev_info rev;
41 struct commit *commit; 38 struct commit *commit;
42 const char *argv[2] = {NULL, tip}; 39 const char *argv[2] = {NULL, tip};
43 int i; 40 int i;
44 41
45 init_revisions(&rev, NULL); 42 init_revisions(&rev, NULL);
46 rev.abbrev = DEFAULT_ABBREV; 43 rev.abbrev = DEFAULT_ABBREV;
47 rev.commit_format = CMIT_FMT_DEFAULT; 44 rev.commit_format = CMIT_FMT_DEFAULT;
48 rev.verbose_header = 1; 45 rev.verbose_header = 1;
49 rev.show_root_diff = 0; 46 rev.show_root_diff = 0;
50 setup_revisions(2, argv, &rev, NULL); 47 setup_revisions(2, argv, &rev, NULL);
51 prepare_revision_walk(&rev); 48 prepare_revision_walk(&rev);
52 49
53 html("<h2>Log</h2>"); 50 html("<h2>Log</h2>");
54 html("<table class='list log'>"); 51 html("<table class='list log'>");
55 html("<tr><th class='left'>Date</th><th class='left'>Message</th><th class='left'>Author</th></tr>\n"); 52 html("<tr><th class='left'>Date</th><th class='left'>Message</th><th class='left'>Author</th></tr>\n");
56 53
57 if (ofs<0) 54 if (ofs<0)
58 ofs = 0; 55 ofs = 0;
diff --git a/ui-summary.c b/ui-summary.c
index 8ff3642..5ddeee3 100644
--- a/ui-summary.c
+++ b/ui-summary.c
@@ -14,48 +14,49 @@ static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1,
14 struct commit *commit; 14 struct commit *commit;
15 struct commitinfo *info; 15 struct commitinfo *info;
16 char buf[256], *url; 16 char buf[256], *url;
17 17
18 commit = lookup_commit(sha1); 18 commit = lookup_commit(sha1);
19 if (commit && !parse_commit(commit)){ 19 if (commit && !parse_commit(commit)){
20 info = cgit_parse_commit(commit); 20 info = cgit_parse_commit(commit);
21 html("<tr><td>"); 21 html("<tr><td>");
22 url = cgit_pageurl(cgit_query_repo, "log", 22 url = cgit_pageurl(cgit_query_repo, "log",
23 fmt("h=%s", refname)); 23 fmt("h=%s", refname));
24 html_link_open(url, NULL, NULL); 24 html_link_open(url, NULL, NULL);
25 strncpy(buf, refname, sizeof(buf)); 25 strncpy(buf, refname, sizeof(buf));
26 html_txt(buf); 26 html_txt(buf);
27 html_link_close(); 27 html_link_close();
28 html("</td><td>"); 28 html("</td><td>");
29 cgit_print_date(commit->date); 29 cgit_print_date(commit->date);
30 html("</td><td>"); 30 html("</td><td>");
31 url = cgit_pageurl(cgit_query_repo, "commit", fmt("id=%s", sha1_to_hex(sha1))); 31 url = cgit_pageurl(cgit_query_repo, "commit", fmt("id=%s", sha1_to_hex(sha1)));
32 html_link_open(url, NULL, NULL); 32 html_link_open(url, NULL, NULL);
33 html_txt(info->subject); 33 html_txt(info->subject);
34 html_link_close(); 34 html_link_close();
35 html("</td><td>"); 35 html("</td><td>");
36 html_txt(info->author); 36 html_txt(info->author);
37 html("</td></tr>\n"); 37 html("</td></tr>\n");
38 cgit_free_commitinfo(info);
38 } else { 39 } else {
39 html("<tr><td>"); 40 html("<tr><td>");
40 html_txt(buf); 41 html_txt(buf);
41 html("</td><td>"); 42 html("</td><td>");
42 htmlf("*** bad ref %s", sha1_to_hex(sha1)); 43 htmlf("*** bad ref %s", sha1_to_hex(sha1));
43 html("</td></tr>\n"); 44 html("</td></tr>\n");
44 } 45 }
45 return 0; 46 return 0;
46} 47}
47 48
48static void cgit_print_branches() 49static void cgit_print_branches()
49{ 50{
50 html("<table class='list'>"); 51 html("<table class='list'>");
51 html("<tr><th class='left'>Branch</th><th class='left'>Updated</th><th class='left'>Commit subject</th><th class='left'>Author</th></tr>\n"); 52 html("<tr><th class='left'>Branch</th><th class='left'>Updated</th><th class='left'>Commit subject</th><th class='left'>Author</th></tr>\n");
52 for_each_branch_ref(cgit_print_branch_cb, NULL); 53 for_each_branch_ref(cgit_print_branch_cb, NULL);
53 html("</table>"); 54 html("</table>");
54} 55}
55 56
56void cgit_print_summary() 57void cgit_print_summary()
57{ 58{
58 html("<h2>"); 59 html("<h2>");
59 html_txt("Repo summary page"); 60 html_txt("Repo summary page");
60 html("</h2>"); 61 html("</h2>");
61 cgit_print_branches(); 62 cgit_print_branches();