summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rwxr-xr-xtests/t0103-log.sh2
-rw-r--r--ui-log.c9
2 files changed, 1 insertions, 10 deletions
diff --git a/tests/t0103-log.sh b/tests/t0103-log.sh
index def5c18..75dd761 100755
--- a/tests/t0103-log.sh
+++ b/tests/t0103-log.sh
@@ -1,25 +1,25 @@
1#!/bin/sh 1#!/bin/sh
2 2
3. ./setup.sh 3. ./setup.sh
4 4
5prepare_tests "Check content on log page" 5prepare_tests "Check content on log page"
6 6
7run_test 'generate foo/log' 'cgit_url "foo/log" >trash/tmp' 7run_test 'generate foo/log' 'cgit_url "foo/log" >trash/tmp'
8run_test 'find commit 1' 'grep -e "commit 1" trash/tmp' 8run_test 'find commit 1' 'grep -e "commit 1" trash/tmp'
9run_test 'find commit 5' 'grep -e "commit 5" trash/tmp' 9run_test 'find commit 5' 'grep -e "commit 5" trash/tmp'
10 10
11run_test 'generate bar/log' 'cgit_url "bar/log" >trash/tmp' 11run_test 'generate bar/log' 'cgit_url "bar/log" >trash/tmp'
12run_test 'find commit 1' 'grep -e "commit 1" trash/tmp' 12run_test 'find commit 1' 'grep -e "commit 1" trash/tmp'
13run_test 'find commit 50' 'grep -e "commit 50" trash/tmp' 13run_test 'find commit 50' 'grep -e "commit 50" trash/tmp'
14 14
15run_test 'generate "with%20space/log?qt=grep&q=commit+1"' ' 15run_test 'generate "with%20space/log?qt=grep&q=commit+1"' '
16 cgit_url "with+space/log&qt=grep&q=commit+1" >trash/tmp 16 cgit_url "with+space/log&qt=grep&q=commit+1" >trash/tmp
17' 17'
18run_test 'find commit 1' 'grep -e "commit 1" trash/tmp' 18run_test 'find commit 1' 'grep -e "commit 1" trash/tmp'
19run_test 'find link with %20 in path' 'grep -e "/with%20space/log/?qt=grep" trash/tmp' 19run_test 'find link with %20 in path' 'grep -e "/with%20space/log/?qt=grep" trash/tmp'
20run_test 'find link with + in arg' 'grep -e "/log/?qt=grep&q=commit+1" trash/tmp' 20run_test 'find link with + in arg' 'grep -e "/log/?qt=grep&q=commit+1" trash/tmp'
21run_test BUG 'no links with space in path' '! grep -e "href=./with space/" trash/tmp' 21run_test 'no links with space in path' '! grep -e "href=./with space/" trash/tmp'
22run_test 'no links with space in arg' '! grep -e "q=commit 1" trash/tmp' 22run_test 'no links with space in arg' '! grep -e "q=commit 1" trash/tmp'
23run_test 'commit 2 is not visible' '! grep -e "commit 2" trash/tmp' 23run_test 'commit 2 is not visible' '! grep -e "commit 2" trash/tmp'
24 24
25tests_done 25tests_done
diff --git a/ui-log.c b/ui-log.c
index 8add66a..15ed6a3 100644
--- a/ui-log.c
+++ b/ui-log.c
@@ -74,130 +74,121 @@ void show_commit_decorations(struct commit *commit)
74 else if (!prefixcmp(deco->name, "refs/tags/")) { 74 else if (!prefixcmp(deco->name, "refs/tags/")) {
75 strncpy(buf, deco->name + 10, sizeof(buf) - 1); 75 strncpy(buf, deco->name + 10, sizeof(buf) - 1);
76 cgit_tag_link(buf, NULL, "tag-deco", ctx.qry.head, buf); 76 cgit_tag_link(buf, NULL, "tag-deco", ctx.qry.head, buf);
77 } 77 }
78 else if (!prefixcmp(deco->name, "refs/remotes/")) { 78 else if (!prefixcmp(deco->name, "refs/remotes/")) {
79 strncpy(buf, deco->name + 13, sizeof(buf) - 1); 79 strncpy(buf, deco->name + 13, sizeof(buf) - 1);
80 cgit_log_link(buf, NULL, "remote-deco", NULL, 80 cgit_log_link(buf, NULL, "remote-deco", NULL,
81 sha1_to_hex(commit->object.sha1), 81 sha1_to_hex(commit->object.sha1),
82 ctx.qry.vpath, 0, NULL, NULL, 82 ctx.qry.vpath, 0, NULL, NULL,
83 ctx.qry.showmsg); 83 ctx.qry.showmsg);
84 } 84 }
85 else { 85 else {
86 strncpy(buf, deco->name, sizeof(buf) - 1); 86 strncpy(buf, deco->name, sizeof(buf) - 1);
87 cgit_commit_link(buf, NULL, "deco", ctx.qry.head, 87 cgit_commit_link(buf, NULL, "deco", ctx.qry.head,
88 sha1_to_hex(commit->object.sha1), 88 sha1_to_hex(commit->object.sha1),
89 ctx.qry.vpath, 0); 89 ctx.qry.vpath, 0);
90 } 90 }
91 deco = deco->next; 91 deco = deco->next;
92 } 92 }
93} 93}
94 94
95void print_commit(struct commit *commit, struct rev_info *revs) 95void print_commit(struct commit *commit, struct rev_info *revs)
96{ 96{
97 struct commitinfo *info; 97 struct commitinfo *info;
98 char *tmp;
99 int cols = revs->graph ? 3 : 2; 98 int cols = revs->graph ? 3 : 2;
100 struct strbuf graphbuf = STRBUF_INIT; 99 struct strbuf graphbuf = STRBUF_INIT;
101 struct strbuf msgbuf = STRBUF_INIT; 100 struct strbuf msgbuf = STRBUF_INIT;
102 101
103 if (ctx.repo->enable_log_filecount) { 102 if (ctx.repo->enable_log_filecount) {
104 cols++; 103 cols++;
105 if (ctx.repo->enable_log_linecount) 104 if (ctx.repo->enable_log_linecount)
106 cols++; 105 cols++;
107 } 106 }
108 107
109 if (revs->graph) { 108 if (revs->graph) {
110 /* Advance graph until current commit */ 109 /* Advance graph until current commit */
111 while (!graph_next_line(revs->graph, &graphbuf)) { 110 while (!graph_next_line(revs->graph, &graphbuf)) {
112 /* Print graph segment in otherwise empty table row */ 111 /* Print graph segment in otherwise empty table row */
113 html("<tr class='nohover'><td class='commitgraph'>"); 112 html("<tr class='nohover'><td class='commitgraph'>");
114 html(graphbuf.buf); 113 html(graphbuf.buf);
115 htmlf("</td><td colspan='%d' /></tr>\n", cols); 114 htmlf("</td><td colspan='%d' /></tr>\n", cols);
116 strbuf_setlen(&graphbuf, 0); 115 strbuf_setlen(&graphbuf, 0);
117 } 116 }
118 /* Current commit's graph segment is now ready in graphbuf */ 117 /* Current commit's graph segment is now ready in graphbuf */
119 } 118 }
120 119
121 info = cgit_parse_commit(commit); 120 info = cgit_parse_commit(commit);
122 htmlf("<tr%s>", ctx.qry.showmsg ? " class='logheader'" : ""); 121 htmlf("<tr%s>", ctx.qry.showmsg ? " class='logheader'" : "");
123 122
124 if (revs->graph) { 123 if (revs->graph) {
125 /* Print graph segment for current commit */ 124 /* Print graph segment for current commit */
126 html("<td class='commitgraph'>"); 125 html("<td class='commitgraph'>");
127 html(graphbuf.buf); 126 html(graphbuf.buf);
128 html("</td>"); 127 html("</td>");
129 strbuf_setlen(&graphbuf, 0); 128 strbuf_setlen(&graphbuf, 0);
130 } 129 }
131 else { 130 else {
132 html("<td>"); 131 html("<td>");
133 tmp = fmt("id=%s", sha1_to_hex(commit->object.sha1));
134 tmp = cgit_fileurl(ctx.repo->url, "commit", ctx.qry.vpath, tmp);
135 html_link_open(tmp, NULL, NULL);
136 cgit_print_age(commit->date, TM_WEEK * 2, FMT_SHORTDATE); 132 cgit_print_age(commit->date, TM_WEEK * 2, FMT_SHORTDATE);
137 html_link_close();
138 html("</td>"); 133 html("</td>");
139 } 134 }
140 135
141 htmlf("<td%s>", ctx.qry.showmsg ? " class='logsubject'" : ""); 136 htmlf("<td%s>", ctx.qry.showmsg ? " class='logsubject'" : "");
142 if (ctx.qry.showmsg) { 137 if (ctx.qry.showmsg) {
143 /* line-wrap long commit subjects instead of truncating them */ 138 /* line-wrap long commit subjects instead of truncating them */
144 size_t subject_len = strlen(info->subject); 139 size_t subject_len = strlen(info->subject);
145 140
146 if (subject_len > ctx.cfg.max_msg_len && 141 if (subject_len > ctx.cfg.max_msg_len &&
147 ctx.cfg.max_msg_len >= 15) { 142 ctx.cfg.max_msg_len >= 15) {
148 /* symbol for signaling line-wrap (in PAGE_ENCODING) */ 143 /* symbol for signaling line-wrap (in PAGE_ENCODING) */
149 const char wrap_symbol[] = { ' ', 0xE2, 0x86, 0xB5, 0 }; 144 const char wrap_symbol[] = { ' ', 0xE2, 0x86, 0xB5, 0 };
150 int i = ctx.cfg.max_msg_len - strlen(wrap_symbol); 145 int i = ctx.cfg.max_msg_len - strlen(wrap_symbol);
151 146
152 /* Rewind i to preceding space character */ 147 /* Rewind i to preceding space character */
153 while (i > 0 && !isspace(info->subject[i])) 148 while (i > 0 && !isspace(info->subject[i]))
154 --i; 149 --i;
155 if (!i) /* Oops, zero spaces. Reset i */ 150 if (!i) /* Oops, zero spaces. Reset i */
156 i = ctx.cfg.max_msg_len - strlen(wrap_symbol); 151 i = ctx.cfg.max_msg_len - strlen(wrap_symbol);
157 152
158 /* add remainder starting at i to msgbuf */ 153 /* add remainder starting at i to msgbuf */
159 strbuf_add(&msgbuf, info->subject + i, subject_len - i); 154 strbuf_add(&msgbuf, info->subject + i, subject_len - i);
160 strbuf_trim(&msgbuf); 155 strbuf_trim(&msgbuf);
161 strbuf_add(&msgbuf, "\n\n", 2); 156 strbuf_add(&msgbuf, "\n\n", 2);
162 157
163 /* Place wrap_symbol at position i in info->subject */ 158 /* Place wrap_symbol at position i in info->subject */
164 strcpy(info->subject + i, wrap_symbol); 159 strcpy(info->subject + i, wrap_symbol);
165 } 160 }
166 } 161 }
167 cgit_commit_link(info->subject, NULL, NULL, ctx.qry.head, 162 cgit_commit_link(info->subject, NULL, NULL, ctx.qry.head,
168 sha1_to_hex(commit->object.sha1), ctx.qry.vpath, 0); 163 sha1_to_hex(commit->object.sha1), ctx.qry.vpath, 0);
169 show_commit_decorations(commit); 164 show_commit_decorations(commit);
170 html("</td><td>"); 165 html("</td><td>");
171 html_txt(info->author); 166 html_txt(info->author);
172 167
173 if (revs->graph) { 168 if (revs->graph) {
174 html("</td><td>"); 169 html("</td><td>");
175 tmp = fmt("id=%s", sha1_to_hex(commit->object.sha1));
176 tmp = cgit_fileurl(ctx.repo->url, "commit", ctx.qry.vpath, tmp);
177 html_link_open(tmp, NULL, NULL);
178 cgit_print_age(commit->date, TM_WEEK * 2, FMT_SHORTDATE); 170 cgit_print_age(commit->date, TM_WEEK * 2, FMT_SHORTDATE);
179 html_link_close();
180 } 171 }
181 172
182 if (ctx.repo->enable_log_filecount) { 173 if (ctx.repo->enable_log_filecount) {
183 files = 0; 174 files = 0;
184 add_lines = 0; 175 add_lines = 0;
185 rem_lines = 0; 176 rem_lines = 0;
186 cgit_diff_commit(commit, inspect_files, ctx.qry.vpath); 177 cgit_diff_commit(commit, inspect_files, ctx.qry.vpath);
187 html("</td><td>"); 178 html("</td><td>");
188 htmlf("%d", files); 179 htmlf("%d", files);
189 if (ctx.repo->enable_log_linecount) { 180 if (ctx.repo->enable_log_linecount) {
190 html("</td><td>"); 181 html("</td><td>");
191 htmlf("-%d/+%d", rem_lines, add_lines); 182 htmlf("-%d/+%d", rem_lines, add_lines);
192 } 183 }
193 } 184 }
194 html("</td></tr>\n"); 185 html("</td></tr>\n");
195 186
196 if (revs->graph || ctx.qry.showmsg) { /* Print a second table row */ 187 if (revs->graph || ctx.qry.showmsg) { /* Print a second table row */
197 html("<tr class='nohover'>"); 188 html("<tr class='nohover'>");
198 189
199 if (ctx.qry.showmsg) { 190 if (ctx.qry.showmsg) {
200 /* Concatenate commit message + notes in msgbuf */ 191 /* Concatenate commit message + notes in msgbuf */
201 if (info->msg && *(info->msg)) { 192 if (info->msg && *(info->msg)) {
202 strbuf_addstr(&msgbuf, info->msg); 193 strbuf_addstr(&msgbuf, info->msg);
203 strbuf_addch(&msgbuf, '\n'); 194 strbuf_addch(&msgbuf, '\n');