summaryrefslogtreecommitdiffabout
authorLars Hjemli <hjemli@gmail.com>2008-11-29 17:39:41 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2008-11-29 17:39:41 (UTC)
commit0274b57d55a12ed38259757dbfae96b79cfa2e0b (patch) (unidiff)
tree34c7204f88168f791ef48f603bb8ab66e9df523c
parent7b5cee65fd9cf31e4f19ce4ff613778cb95512a9 (diff)
downloadcgit-0274b57d55a12ed38259757dbfae96b79cfa2e0b.zip
cgit-0274b57d55a12ed38259757dbfae96b79cfa2e0b.tar.gz
cgit-0274b57d55a12ed38259757dbfae96b79cfa2e0b.tar.bz2
ui-log: add support for showing the full commit message
Some users prefer to see the full message, so to make these users happy the new querystring parameter "showmsg" can be used to print the full commit message per log entry. A link is provided in the log heading to make this function accessible, and all links and forms tries to preserve the users preference. Note: the new link is not displayed on the summary page since the point of the summary page is to be a summary, but it is still obeyed if specified manually. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.c2
-rw-r--r--cgit.h1
-rw-r--r--ui-log.c32
-rw-r--r--ui-refs.c3
-rw-r--r--ui-repolist.c2
-rw-r--r--ui-shared.c12
-rw-r--r--ui-shared.h2
-rw-r--r--ui-tree.c2
8 files changed, 45 insertions, 11 deletions
diff --git a/cgit.c b/cgit.c
index c82587b..db5d342 100644
--- a/cgit.c
+++ b/cgit.c
@@ -151,12 +151,14 @@ static void querystring_cb(const char *name, const char *value)
151 } else if (!strcmp(name, "path")) { 151 } else if (!strcmp(name, "path")) {
152 ctx.qry.path = trim_end(value, '/'); 152 ctx.qry.path = trim_end(value, '/');
153 } else if (!strcmp(name, "name")) { 153 } else if (!strcmp(name, "name")) {
154 ctx.qry.name = xstrdup(value); 154 ctx.qry.name = xstrdup(value);
155 } else if (!strcmp(name, "mimetype")) { 155 } else if (!strcmp(name, "mimetype")) {
156 ctx.qry.mimetype = xstrdup(value); 156 ctx.qry.mimetype = xstrdup(value);
157 } else if (!strcmp(name, "showmsg")) {
158 ctx.qry.showmsg = atoi(value);
157 } 159 }
158} 160}
159 161
160static void prepare_context(struct cgit_context *ctx) 162static void prepare_context(struct cgit_context *ctx)
161{ 163{
162 memset(ctx, 0, sizeof(ctx)); 164 memset(ctx, 0, sizeof(ctx));
diff --git a/cgit.h b/cgit.h
index 91db98a..aab898b 100644
--- a/cgit.h
+++ b/cgit.h
@@ -118,12 +118,13 @@ struct cgit_query {
118 char *path; 118 char *path;
119 char *name; 119 char *name;
120 char *mimetype; 120 char *mimetype;
121 char *url; 121 char *url;
122 int ofs; 122 int ofs;
123 int nohead; 123 int nohead;
124 int showmsg;
124}; 125};
125 126
126struct cgit_config { 127struct cgit_config {
127 char *agefile; 128 char *agefile;
128 char *cache_root; 129 char *cache_root;
129 char *clone_prefix; 130 char *clone_prefix;
diff --git a/ui-log.c b/ui-log.c
index 8dd8b89..631e46d 100644
--- a/ui-log.c
+++ b/ui-log.c
@@ -41,14 +41,18 @@ void print_commit(struct commit *commit)
41 tmp = fmt("id=%s", sha1_to_hex(commit->object.sha1)); 41 tmp = fmt("id=%s", sha1_to_hex(commit->object.sha1));
42 tmp = cgit_pageurl(ctx.repo->url, "commit", tmp); 42 tmp = cgit_pageurl(ctx.repo->url, "commit", tmp);
43 html_link_open(tmp, NULL, NULL); 43 html_link_open(tmp, NULL, NULL);
44 cgit_print_age(commit->date, TM_WEEK * 2, FMT_SHORTDATE); 44 cgit_print_age(commit->date, TM_WEEK * 2, FMT_SHORTDATE);
45 html_link_close(); 45 html_link_close();
46 html("</td><td>"); 46 html("</td><td>");
47 if (ctx.qry.showmsg)
48 html("<u>");
47 cgit_commit_link(info->subject, NULL, NULL, ctx.qry.head, 49 cgit_commit_link(info->subject, NULL, NULL, ctx.qry.head,
48 sha1_to_hex(commit->object.sha1)); 50 sha1_to_hex(commit->object.sha1));
51 if (ctx.qry.showmsg)
52 html("</u>");
49 html("</td><td>"); 53 html("</td><td>");
50 html_txt(info->author); 54 html_txt(info->author);
51 if (ctx.repo->enable_log_filecount) { 55 if (ctx.repo->enable_log_filecount) {
52 files = 0; 56 files = 0;
53 add_lines = 0; 57 add_lines = 0;
54 rem_lines = 0; 58 rem_lines = 0;
@@ -58,12 +62,23 @@ void print_commit(struct commit *commit)
58 if (ctx.repo->enable_log_linecount) { 62 if (ctx.repo->enable_log_linecount) {
59 html("</td><td>"); 63 html("</td><td>");
60 htmlf("-%d/+%d", rem_lines, add_lines); 64 htmlf("-%d/+%d", rem_lines, add_lines);
61 } 65 }
62 } 66 }
63 html("</td></tr>\n"); 67 html("</td></tr>\n");
68 if (ctx.qry.showmsg) {
69 html("<tr class='nohover'><td></td><td><div class='commit-msg'>");
70 html_txt(info->msg);
71 html("</div><br/></td><td></td>");
72 if (ctx.repo->enable_log_filecount) {
73 html("<td></td>");
74 if (ctx.repo->enable_log_linecount)
75 html("<td></td>");
76 }
77 html("</tr>\n");
78 }
64 cgit_free_commitinfo(info); 79 cgit_free_commitinfo(info);
65} 80}
66 81
67 82
68void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern, 83void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern,
69 char *path, int pager) 84 char *path, int pager)
@@ -97,14 +112,21 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern
97 prepare_revision_walk(&rev); 112 prepare_revision_walk(&rev);
98 113
99 if (pager) 114 if (pager)
100 html("<table class='list nowrap'>"); 115 html("<table class='list nowrap'>");
101 116
102 html("<tr class='nohover'><th class='left'>Age</th>" 117 html("<tr class='nohover'><th class='left'>Age</th>"
103 "<th class='left'>Commit message</th>" 118 "<th class='left'>Commit message");
104 "<th class='left'>Author</th>"); 119 if (pager) {
120 html(" (");
121 cgit_log_link("toggle", NULL, NULL, ctx.qry.head, ctx.qry.sha1,
122 ctx.qry.path, ctx.qry.ofs, ctx.qry.grep,
123 ctx.qry.search, ctx.qry.showmsg ? 0 : 1);
124 html(")");
125 }
126 html("</th><th class='left'>Author</th>");
105 if (ctx.repo->enable_log_filecount) { 127 if (ctx.repo->enable_log_filecount) {
106 html("<th class='left'>Files</th>"); 128 html("<th class='left'>Files</th>");
107 columns++; 129 columns++;
108 if (ctx.repo->enable_log_linecount) { 130 if (ctx.repo->enable_log_linecount) {
109 html("<th class='left'>Lines</th>"); 131 html("<th class='left'>Lines</th>");
110 columns++; 132 columns++;
@@ -133,23 +155,23 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern
133 htmlf("</table><div class='pager'>", 155 htmlf("</table><div class='pager'>",
134 columns); 156 columns);
135 if (ofs > 0) { 157 if (ofs > 0) {
136 cgit_log_link("[prev]", NULL, NULL, ctx.qry.head, 158 cgit_log_link("[prev]", NULL, NULL, ctx.qry.head,
137 ctx.qry.sha1, ctx.qry.path, 159 ctx.qry.sha1, ctx.qry.path,
138 ofs - cnt, ctx.qry.grep, 160 ofs - cnt, ctx.qry.grep,
139 ctx.qry.search); 161 ctx.qry.search, ctx.qry.showmsg);
140 html("&nbsp;"); 162 html("&nbsp;");
141 } 163 }
142 if ((commit = get_revision(&rev)) != NULL) { 164 if ((commit = get_revision(&rev)) != NULL) {
143 cgit_log_link("[next]", NULL, NULL, ctx.qry.head, 165 cgit_log_link("[next]", NULL, NULL, ctx.qry.head,
144 ctx.qry.sha1, ctx.qry.path, 166 ctx.qry.sha1, ctx.qry.path,
145 ofs + cnt, ctx.qry.grep, 167 ofs + cnt, ctx.qry.grep,
146 ctx.qry.search); 168 ctx.qry.search, ctx.qry.showmsg);
147 } 169 }
148 html("</div>"); 170 html("</div>");
149 } else if ((commit = get_revision(&rev)) != NULL) { 171 } else if ((commit = get_revision(&rev)) != NULL) {
150 html("<tr class='nohover'><td colspan='3'>"); 172 html("<tr class='nohover'><td colspan='3'>");
151 cgit_log_link("[...]", NULL, NULL, ctx.qry.head, NULL, NULL, 0, 173 cgit_log_link("[...]", NULL, NULL, ctx.qry.head, NULL, NULL, 0,
152 NULL, NULL); 174 NULL, NULL, ctx.qry.showmsg);
153 html("</td></tr>\n"); 175 html("</td></tr>\n");
154 } 176 }
155} 177}
diff --git a/ui-refs.c b/ui-refs.c
index 32e0429..7eb16d5 100644
--- a/ui-refs.c
+++ b/ui-refs.c
@@ -55,13 +55,14 @@ static int print_branch(struct refinfo *ref)
55 struct commitinfo *info = ref->commit; 55 struct commitinfo *info = ref->commit;
56 char *name = (char *)ref->refname; 56 char *name = (char *)ref->refname;
57 57
58 if (!info) 58 if (!info)
59 return 1; 59 return 1;
60 html("<tr><td>"); 60 html("<tr><td>");
61 cgit_log_link(name, NULL, NULL, name, NULL, NULL, 0, NULL, NULL); 61 cgit_log_link(name, NULL, NULL, name, NULL, NULL, 0, NULL, NULL,
62 ctx.qry.showmsg);
62 html("</td><td>"); 63 html("</td><td>");
63 64
64 if (ref->object->type == OBJ_COMMIT) { 65 if (ref->object->type == OBJ_COMMIT) {
65 cgit_commit_link(info->subject, NULL, NULL, name, NULL); 66 cgit_commit_link(info->subject, NULL, NULL, name, NULL);
66 html("</td><td>"); 67 html("</td><td>");
67 html_txt(info->author); 68 html_txt(info->author);
diff --git a/ui-repolist.c b/ui-repolist.c
index c23232c..5833140 100644
--- a/ui-repolist.c
+++ b/ui-repolist.c
@@ -143,13 +143,13 @@ void cgit_print_repolist()
143 print_modtime(ctx.repo); 143 print_modtime(ctx.repo);
144 html("</td>"); 144 html("</td>");
145 if (ctx.cfg.enable_index_links) { 145 if (ctx.cfg.enable_index_links) {
146 html("<td>"); 146 html("<td>");
147 cgit_summary_link("summary", NULL, "button", NULL); 147 cgit_summary_link("summary", NULL, "button", NULL);
148 cgit_log_link("log", NULL, "button", NULL, NULL, NULL, 148 cgit_log_link("log", NULL, "button", NULL, NULL, NULL,
149 0, NULL, NULL); 149 0, NULL, NULL, ctx.qry.showmsg);
150 cgit_tree_link("tree", NULL, "button", NULL, NULL, NULL); 150 cgit_tree_link("tree", NULL, "button", NULL, NULL, NULL);
151 html("</td>"); 151 html("</td>");
152 } 152 }
153 html("</tr>\n"); 153 html("</tr>\n");
154 } 154 }
155 html("</table>"); 155 html("</table>");
diff --git a/ui-shared.c b/ui-shared.c
index 224e5f3..dc39e64 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -278,13 +278,14 @@ void cgit_plain_link(char *name, char *title, char *class, char *head,
278 char *rev, char *path) 278 char *rev, char *path)
279{ 279{
280 reporevlink("plain", name, title, class, head, rev, path); 280 reporevlink("plain", name, title, class, head, rev, path);
281} 281}
282 282
283void cgit_log_link(char *name, char *title, char *class, char *head, 283void cgit_log_link(char *name, char *title, char *class, char *head,
284 char *rev, char *path, int ofs, char *grep, char *pattern) 284 char *rev, char *path, int ofs, char *grep, char *pattern,
285 int showmsg)
285{ 286{
286 char *delim; 287 char *delim;
287 288
288 delim = repolink(title, class, "log", head, path); 289 delim = repolink(title, class, "log", head, path);
289 if (rev && strcmp(rev, ctx.qry.head)) { 290 if (rev && strcmp(rev, ctx.qry.head)) {
290 html(delim); 291 html(delim);
@@ -302,12 +303,17 @@ void cgit_log_link(char *name, char *title, char *class, char *head,
302 html_url_arg(pattern); 303 html_url_arg(pattern);
303 } 304 }
304 if (ofs > 0) { 305 if (ofs > 0) {
305 html(delim); 306 html(delim);
306 html("ofs="); 307 html("ofs=");
307 htmlf("%d", ofs); 308 htmlf("%d", ofs);
309 delim = "&";
310 }
311 if (showmsg) {
312 html(delim);
313 html("showmsg=1");
308 } 314 }
309 html("'>"); 315 html("'>");
310 html_txt(name); 316 html_txt(name);
311 html("</a>"); 317 html("</a>");
312} 318}
313 319
@@ -565,12 +571,14 @@ void add_hidden_formfields(int incl_head, int incl_search, char *page)
565 html_hidden("h", ctx.qry.head); 571 html_hidden("h", ctx.qry.head);
566 572
567 if (ctx.qry.sha1) 573 if (ctx.qry.sha1)
568 html_hidden("id", ctx.qry.sha1); 574 html_hidden("id", ctx.qry.sha1);
569 if (ctx.qry.sha2) 575 if (ctx.qry.sha2)
570 html_hidden("id2", ctx.qry.sha2); 576 html_hidden("id2", ctx.qry.sha2);
577 if (ctx.qry.showmsg)
578 html_hidden("showmsg", "1");
571 579
572 if (incl_search) { 580 if (incl_search) {
573 if (ctx.qry.grep) 581 if (ctx.qry.grep)
574 html_hidden("qt", ctx.qry.grep); 582 html_hidden("qt", ctx.qry.grep);
575 if (ctx.qry.search) 583 if (ctx.qry.search)
576 html_hidden("q", ctx.qry.search); 584 html_hidden("q", ctx.qry.search);
@@ -631,13 +639,13 @@ void cgit_print_pageheader(struct cgit_context *ctx)
631 if (ctx->repo) { 639 if (ctx->repo) {
632 cgit_summary_link("summary", NULL, hc(cmd, "summary"), 640 cgit_summary_link("summary", NULL, hc(cmd, "summary"),
633 ctx->qry.head); 641 ctx->qry.head);
634 cgit_refs_link("refs", NULL, hc(cmd, "refs"), ctx->qry.head, 642 cgit_refs_link("refs", NULL, hc(cmd, "refs"), ctx->qry.head,
635 ctx->qry.sha1, NULL); 643 ctx->qry.sha1, NULL);
636 cgit_log_link("log", NULL, hc(cmd, "log"), ctx->qry.head, 644 cgit_log_link("log", NULL, hc(cmd, "log"), ctx->qry.head,
637 NULL, NULL, 0, NULL, NULL); 645 NULL, NULL, 0, NULL, NULL, ctx->qry.showmsg);
638 cgit_tree_link("tree", NULL, hc(cmd, "tree"), ctx->qry.head, 646 cgit_tree_link("tree", NULL, hc(cmd, "tree"), ctx->qry.head,
639 ctx->qry.sha1, NULL); 647 ctx->qry.sha1, NULL);
640 cgit_commit_link("commit", NULL, hc(cmd, "commit"), 648 cgit_commit_link("commit", NULL, hc(cmd, "commit"),
641 ctx->qry.head, ctx->qry.sha1); 649 ctx->qry.head, ctx->qry.sha1);
642 cgit_diff_link("diff", NULL, hc(cmd, "diff"), ctx->qry.head, 650 cgit_diff_link("diff", NULL, hc(cmd, "diff"), ctx->qry.head,
643 ctx->qry.sha1, ctx->qry.sha2, NULL); 651 ctx->qry.sha1, ctx->qry.sha2, NULL);
diff --git a/ui-shared.h b/ui-shared.h
index 3c8a6d0..2ab53ae 100644
--- a/ui-shared.h
+++ b/ui-shared.h
@@ -16,13 +16,13 @@ extern void cgit_tag_link(char *name, char *title, char *class, char *head,
16extern void cgit_tree_link(char *name, char *title, char *class, char *head, 16extern void cgit_tree_link(char *name, char *title, char *class, char *head,
17 char *rev, char *path); 17 char *rev, char *path);
18extern void cgit_plain_link(char *name, char *title, char *class, char *head, 18extern void cgit_plain_link(char *name, char *title, char *class, char *head,
19 char *rev, char *path); 19 char *rev, char *path);
20extern void cgit_log_link(char *name, char *title, char *class, char *head, 20extern void cgit_log_link(char *name, char *title, char *class, char *head,
21 char *rev, char *path, int ofs, char *grep, 21 char *rev, char *path, int ofs, char *grep,
22 char *pattern); 22 char *pattern, int showmsg);
23extern void cgit_commit_link(char *name, char *title, char *class, char *head, 23extern void cgit_commit_link(char *name, char *title, char *class, char *head,
24 char *rev); 24 char *rev);
25extern void cgit_patch_link(char *name, char *title, char *class, char *head, 25extern void cgit_patch_link(char *name, char *title, char *class, char *head,
26 char *rev); 26 char *rev);
27extern void cgit_refs_link(char *name, char *title, char *class, char *head, 27extern void cgit_refs_link(char *name, char *title, char *class, char *head,
28 char *rev, char *path); 28 char *rev, char *path);
diff --git a/ui-tree.c b/ui-tree.c
index 79332fc..051db7c 100644
--- a/ui-tree.c
+++ b/ui-tree.c
@@ -103,13 +103,13 @@ static int ls_item(const unsigned char *sha1, const char *base, int baselen,
103 curr_rev, fullpath); 103 curr_rev, fullpath);
104 } 104 }
105 htmlf("</td><td class='ls-size'>%li</td>", size); 105 htmlf("</td><td class='ls-size'>%li</td>", size);
106 106
107 html("<td>"); 107 html("<td>");
108 cgit_log_link("log", NULL, "button", ctx.qry.head, curr_rev, 108 cgit_log_link("log", NULL, "button", ctx.qry.head, curr_rev,
109 fullpath, 0, NULL, NULL); 109 fullpath, 0, NULL, NULL, ctx.qry.showmsg);
110 html("</td></tr>\n"); 110 html("</td></tr>\n");
111 free(name); 111 free(name);
112 return 0; 112 return 0;
113} 113}
114 114
115static void ls_head() 115static void ls_head()