summaryrefslogtreecommitdiffabout
authorJohan Herland <johan@herland.net>2010-11-15 17:39:49 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2010-11-16 07:18:36 (UTC)
commit5a36c2a291a00b59b8ec2f112453e117797c2fe5 (patch) (unidiff)
treeeb975b9e99401e3209fc3180409ec48b285920ac
parentc2680325f68192368d32f26458fea9cfb50df6e5 (diff)
downloadcgit-5a36c2a291a00b59b8ec2f112453e117797c2fe5.zip
cgit-5a36c2a291a00b59b8ec2f112453e117797c2fe5.tar.gz
cgit-5a36c2a291a00b59b8ec2f112453e117797c2fe5.tar.bz2
ui-log: Change display of full commit messages (and notes)
When showmsg is enabled, ui-log (in addition to the table row containing the details of the current commit) adds a second table row containing the remainder of the commit message, and yet another table row containing the commit notes (if any). The vertical margins between commit subject, commit message and commit notes are controlled by CSS. In preparation for the commit graph (which will be printed to the left of the commit message/notes) we need to eliminate these vertical margins (as they would produce ugly gaps in the commit graph) and instead achieve them by adding newlines to the commit message/notes. Furthermore, we can no longer print the "Notes:" header in the "Age" column, since the graph will be drawn between the "Age" column and the "Commit message" column. This patch therefore prepares the commit message and commit notes in a single buffer (properly formatting the notes using the NOTES_SHOW_HEADER and NOTES_INDENT flags to format_note()), and then prints the entire buffer into a single table row. Signed-off-by: Johan Herland <johan@herland.net> Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.css13
-rw-r--r--ui-log.c30
2 files changed, 18 insertions, 25 deletions
diff --git a/cgit.css b/cgit.css
index 0c88b65..7a5f423 100644
--- a/cgit.css
+++ b/cgit.css
@@ -68,204 +68,193 @@ table.tabs {
68 border-collapse: collapse; 68 border-collapse: collapse;
69 margin-top: 2em; 69 margin-top: 2em;
70 margin-bottom: 0px; 70 margin-bottom: 0px;
71 width: 100%; 71 width: 100%;
72} 72}
73 73
74table.tabs td { 74table.tabs td {
75 padding: 0px 1em; 75 padding: 0px 1em;
76 vertical-align: bottom; 76 vertical-align: bottom;
77} 77}
78 78
79table.tabs td a { 79table.tabs td a {
80 padding: 2px 0.75em; 80 padding: 2px 0.75em;
81 color: #777; 81 color: #777;
82 font-size: 110%; 82 font-size: 110%;
83} 83}
84 84
85table.tabs td a.active { 85table.tabs td a.active {
86 color: #000; 86 color: #000;
87 background-color: #ccc; 87 background-color: #ccc;
88} 88}
89 89
90table.tabs td.form { 90table.tabs td.form {
91 text-align: right; 91 text-align: right;
92} 92}
93 93
94table.tabs td.form form { 94table.tabs td.form form {
95 padding-bottom: 2px; 95 padding-bottom: 2px;
96 font-size: 90%; 96 font-size: 90%;
97 white-space: nowrap; 97 white-space: nowrap;
98} 98}
99 99
100table.tabs td.form input, 100table.tabs td.form input,
101table.tabs td.form select { 101table.tabs td.form select {
102 font-size: 90%; 102 font-size: 90%;
103} 103}
104 104
105div.path { 105div.path {
106 margin: 0px; 106 margin: 0px;
107 padding: 5px 2em 2px 2em; 107 padding: 5px 2em 2px 2em;
108 color: #000; 108 color: #000;
109 background-color: #eee; 109 background-color: #eee;
110} 110}
111 111
112div.content { 112div.content {
113 margin: 0px; 113 margin: 0px;
114 padding: 2em; 114 padding: 2em;
115 border-bottom: solid 3px #ccc; 115 border-bottom: solid 3px #ccc;
116} 116}
117 117
118 118
119table.list { 119table.list {
120 width: 100%; 120 width: 100%;
121 border: none; 121 border: none;
122 border-collapse: collapse; 122 border-collapse: collapse;
123} 123}
124 124
125table.list tr { 125table.list tr {
126 background: white; 126 background: white;
127} 127}
128 128
129table.list tr.logheader { 129table.list tr.logheader {
130 background: #eee; 130 background: #eee;
131} 131}
132 132
133table.list tr:hover { 133table.list tr:hover {
134 background: #eee; 134 background: #eee;
135} 135}
136 136
137table.list tr.nohover:hover { 137table.list tr.nohover:hover {
138 background: white; 138 background: white;
139} 139}
140 140
141table.list th { 141table.list th {
142 font-weight: bold; 142 font-weight: bold;
143 /* color: #888; 143 /* color: #888;
144 border-top: dashed 1px #888; 144 border-top: dashed 1px #888;
145 border-bottom: dashed 1px #888; 145 border-bottom: dashed 1px #888;
146 */ 146 */
147 padding: 0.1em 0.5em 0.05em 0.5em; 147 padding: 0.1em 0.5em 0.05em 0.5em;
148 vertical-align: baseline; 148 vertical-align: baseline;
149} 149}
150 150
151table.list td { 151table.list td {
152 border: none; 152 border: none;
153 padding: 0.1em 0.5em 0.1em 0.5em; 153 padding: 0.1em 0.5em 0.1em 0.5em;
154} 154}
155 155
156table.list td.logsubject { 156table.list td.logsubject {
157 font-family: monospace; 157 font-family: monospace;
158 font-weight: bold; 158 font-weight: bold;
159} 159}
160 160
161table.list td.logmsg { 161table.list td.logmsg {
162 font-family: monospace; 162 font-family: monospace;
163 white-space: pre; 163 white-space: pre;
164 padding: 1em 0.5em 2em 0.5em; 164 padding: 0 0.5em;
165}
166
167table.list td.lognotes-label {
168 text-align:right;
169 vertical-align:top;
170}
171
172table.list td.lognotes {
173 font-family: monospace;
174 white-space: pre;
175 padding: 0em 0.5em 2em 0.5em;
176} 165}
177 166
178table.list td a { 167table.list td a {
179 color: black; 168 color: black;
180} 169}
181 170
182table.list td a.ls-dir { 171table.list td a.ls-dir {
183 font-weight: bold; 172 font-weight: bold;
184 color: #00f; 173 color: #00f;
185} 174}
186 175
187table.list td a:hover { 176table.list td a:hover {
188 color: #00f; 177 color: #00f;
189} 178}
190 179
191img { 180img {
192 border: none; 181 border: none;
193} 182}
194 183
195input#switch-btn { 184input#switch-btn {
196 margin: 2px 0px 0px 0px; 185 margin: 2px 0px 0px 0px;
197} 186}
198 187
199td#sidebar input.txt { 188td#sidebar input.txt {
200 width: 100%; 189 width: 100%;
201 margin: 2px 0px 0px 0px; 190 margin: 2px 0px 0px 0px;
202} 191}
203 192
204table#grid { 193table#grid {
205 margin: 0px; 194 margin: 0px;
206} 195}
207 196
208td#content { 197td#content {
209 vertical-align: top; 198 vertical-align: top;
210 padding: 1em 2em 1em 1em; 199 padding: 1em 2em 1em 1em;
211 border: none; 200 border: none;
212} 201}
213 202
214div#summary { 203div#summary {
215 vertical-align: top; 204 vertical-align: top;
216 margin-bottom: 1em; 205 margin-bottom: 1em;
217} 206}
218 207
219table#downloads { 208table#downloads {
220 float: right; 209 float: right;
221 border-collapse: collapse; 210 border-collapse: collapse;
222 border: solid 1px #777; 211 border: solid 1px #777;
223 margin-left: 0.5em; 212 margin-left: 0.5em;
224 margin-bottom: 0.5em; 213 margin-bottom: 0.5em;
225} 214}
226 215
227table#downloads th { 216table#downloads th {
228 background-color: #ccc; 217 background-color: #ccc;
229} 218}
230 219
231div#blob { 220div#blob {
232 border: solid 1px black; 221 border: solid 1px black;
233} 222}
234 223
235div.error { 224div.error {
236 color: red; 225 color: red;
237 font-weight: bold; 226 font-weight: bold;
238 margin: 1em 2em; 227 margin: 1em 2em;
239} 228}
240 229
241a.ls-blob, a.ls-dir, a.ls-mod { 230a.ls-blob, a.ls-dir, a.ls-mod {
242 font-family: monospace; 231 font-family: monospace;
243} 232}
244 233
245td.ls-size { 234td.ls-size {
246 text-align: right; 235 text-align: right;
247 font-family: monospace; 236 font-family: monospace;
248 width: 10em; 237 width: 10em;
249} 238}
250 239
251td.ls-mode { 240td.ls-mode {
252 font-family: monospace; 241 font-family: monospace;
253 width: 10em; 242 width: 10em;
254} 243}
255 244
256table.blob { 245table.blob {
257 margin-top: 0.5em; 246 margin-top: 0.5em;
258 border-top: solid 1px black; 247 border-top: solid 1px black;
259} 248}
260 249
261table.blob td.lines { 250table.blob td.lines {
262 margin: 0; padding: 0 0 0 0.5em; 251 margin: 0; padding: 0 0 0 0.5em;
263 vertical-align: top; 252 vertical-align: top;
264 color: black; 253 color: black;
265} 254}
266 255
267table.blob td.linenumbers { 256table.blob td.linenumbers {
268 margin: 0; padding: 0 0.5em 0 0.5em; 257 margin: 0; padding: 0 0.5em 0 0.5em;
269 vertical-align: top; 258 vertical-align: top;
270 text-align: right; 259 text-align: right;
271 border-right: 1px solid gray; 260 border-right: 1px solid gray;
diff --git a/ui-log.c b/ui-log.c
index 27f5a1a..6d7fcae 100644
--- a/ui-log.c
+++ b/ui-log.c
@@ -18,215 +18,219 @@ void count_lines(char *line, int size)
18 if (size <= 0) 18 if (size <= 0)
19 return; 19 return;
20 20
21 if (line[0] == '+') 21 if (line[0] == '+')
22 add_lines++; 22 add_lines++;
23 23
24 else if (line[0] == '-') 24 else if (line[0] == '-')
25 rem_lines++; 25 rem_lines++;
26} 26}
27 27
28void inspect_files(struct diff_filepair *pair) 28void inspect_files(struct diff_filepair *pair)
29{ 29{
30 unsigned long old_size = 0; 30 unsigned long old_size = 0;
31 unsigned long new_size = 0; 31 unsigned long new_size = 0;
32 int binary = 0; 32 int binary = 0;
33 33
34 files++; 34 files++;
35 if (ctx.repo->enable_log_linecount) 35 if (ctx.repo->enable_log_linecount)
36 cgit_diff_files(pair->one->sha1, pair->two->sha1, &old_size, 36 cgit_diff_files(pair->one->sha1, pair->two->sha1, &old_size,
37 &new_size, &binary, 0, ctx.qry.ignorews, 37 &new_size, &binary, 0, ctx.qry.ignorews,
38 count_lines); 38 count_lines);
39} 39}
40 40
41void show_commit_decorations(struct commit *commit) 41void show_commit_decorations(struct commit *commit)
42{ 42{
43 struct name_decoration *deco; 43 struct name_decoration *deco;
44 static char buf[1024]; 44 static char buf[1024];
45 45
46 buf[sizeof(buf) - 1] = 0; 46 buf[sizeof(buf) - 1] = 0;
47 deco = lookup_decoration(&name_decoration, &commit->object); 47 deco = lookup_decoration(&name_decoration, &commit->object);
48 while (deco) { 48 while (deco) {
49 if (!prefixcmp(deco->name, "refs/heads/")) { 49 if (!prefixcmp(deco->name, "refs/heads/")) {
50 strncpy(buf, deco->name + 11, sizeof(buf) - 1); 50 strncpy(buf, deco->name + 11, sizeof(buf) - 1);
51 cgit_log_link(buf, NULL, "branch-deco", buf, NULL, 51 cgit_log_link(buf, NULL, "branch-deco", buf, NULL,
52 ctx.qry.vpath, 0, NULL, NULL, 52 ctx.qry.vpath, 0, NULL, NULL,
53 ctx.qry.showmsg); 53 ctx.qry.showmsg);
54 } 54 }
55 else if (!prefixcmp(deco->name, "tag: refs/tags/")) { 55 else if (!prefixcmp(deco->name, "tag: refs/tags/")) {
56 strncpy(buf, deco->name + 15, sizeof(buf) - 1); 56 strncpy(buf, deco->name + 15, sizeof(buf) - 1);
57 cgit_tag_link(buf, NULL, "tag-deco", ctx.qry.head, buf); 57 cgit_tag_link(buf, NULL, "tag-deco", ctx.qry.head, buf);
58 } 58 }
59 else if (!prefixcmp(deco->name, "refs/tags/")) { 59 else if (!prefixcmp(deco->name, "refs/tags/")) {
60 strncpy(buf, deco->name + 10, sizeof(buf) - 1); 60 strncpy(buf, deco->name + 10, sizeof(buf) - 1);
61 cgit_tag_link(buf, NULL, "tag-deco", ctx.qry.head, buf); 61 cgit_tag_link(buf, NULL, "tag-deco", ctx.qry.head, buf);
62 } 62 }
63 else if (!prefixcmp(deco->name, "refs/remotes/")) { 63 else if (!prefixcmp(deco->name, "refs/remotes/")) {
64 strncpy(buf, deco->name + 13, sizeof(buf) - 1); 64 strncpy(buf, deco->name + 13, sizeof(buf) - 1);
65 cgit_log_link(buf, NULL, "remote-deco", NULL, 65 cgit_log_link(buf, NULL, "remote-deco", NULL,
66 sha1_to_hex(commit->object.sha1), 66 sha1_to_hex(commit->object.sha1),
67 ctx.qry.vpath, 0, NULL, NULL, 67 ctx.qry.vpath, 0, NULL, NULL,
68 ctx.qry.showmsg); 68 ctx.qry.showmsg);
69 } 69 }
70 else { 70 else {
71 strncpy(buf, deco->name, sizeof(buf) - 1); 71 strncpy(buf, deco->name, sizeof(buf) - 1);
72 cgit_commit_link(buf, NULL, "deco", ctx.qry.head, 72 cgit_commit_link(buf, NULL, "deco", ctx.qry.head,
73 sha1_to_hex(commit->object.sha1), 73 sha1_to_hex(commit->object.sha1),
74 ctx.qry.vpath, 0); 74 ctx.qry.vpath, 0);
75 } 75 }
76 deco = deco->next; 76 deco = deco->next;
77 } 77 }
78} 78}
79 79
80void print_commit(struct commit *commit) 80void print_commit(struct commit *commit)
81{ 81{
82 struct commitinfo *info; 82 struct commitinfo *info;
83 char *tmp; 83 char *tmp;
84 int cols = 2; 84 int cols = 2;
85 85
86 info = cgit_parse_commit(commit); 86 info = cgit_parse_commit(commit);
87 htmlf("<tr%s><td>", 87 htmlf("<tr%s><td>",
88 ctx.qry.showmsg ? " class='logheader'" : ""); 88 ctx.qry.showmsg ? " class='logheader'" : "");
89 tmp = fmt("id=%s", sha1_to_hex(commit->object.sha1)); 89 tmp = fmt("id=%s", sha1_to_hex(commit->object.sha1));
90 tmp = cgit_fileurl(ctx.repo->url, "commit", ctx.qry.vpath, tmp); 90 tmp = cgit_fileurl(ctx.repo->url, "commit", ctx.qry.vpath, tmp);
91 html_link_open(tmp, NULL, NULL); 91 html_link_open(tmp, NULL, NULL);
92 cgit_print_age(commit->date, TM_WEEK * 2, FMT_SHORTDATE); 92 cgit_print_age(commit->date, TM_WEEK * 2, FMT_SHORTDATE);
93 html_link_close(); 93 html_link_close();
94 htmlf("</td><td%s>", 94 htmlf("</td><td%s>",
95 ctx.qry.showmsg ? " class='logsubject'" : ""); 95 ctx.qry.showmsg ? " class='logsubject'" : "");
96 cgit_commit_link(info->subject, NULL, NULL, ctx.qry.head, 96 cgit_commit_link(info->subject, NULL, NULL, ctx.qry.head,
97 sha1_to_hex(commit->object.sha1), ctx.qry.vpath, 0); 97 sha1_to_hex(commit->object.sha1), ctx.qry.vpath, 0);
98 show_commit_decorations(commit); 98 show_commit_decorations(commit);
99 html("</td><td>"); 99 html("</td><td>");
100 html_txt(info->author); 100 html_txt(info->author);
101 if (ctx.repo->enable_log_filecount) { 101 if (ctx.repo->enable_log_filecount) {
102 files = 0; 102 files = 0;
103 add_lines = 0; 103 add_lines = 0;
104 rem_lines = 0; 104 rem_lines = 0;
105 cgit_diff_commit(commit, inspect_files, ctx.qry.vpath); 105 cgit_diff_commit(commit, inspect_files, ctx.qry.vpath);
106 html("</td><td>"); 106 html("</td><td>");
107 htmlf("%d", files); 107 htmlf("%d", files);
108 if (ctx.repo->enable_log_linecount) { 108 if (ctx.repo->enable_log_linecount) {
109 html("</td><td>"); 109 html("</td><td>");
110 htmlf("-%d/+%d", rem_lines, add_lines); 110 htmlf("-%d/+%d", rem_lines, add_lines);
111 } 111 }
112 } 112 }
113 html("</td></tr>\n"); 113 html("</td></tr>\n");
114 if (ctx.qry.showmsg) { 114
115 struct strbuf notes = STRBUF_INIT; 115 if (ctx.qry.showmsg) { /* Print message + notes in a second table row */
116 format_note(NULL, commit->object.sha1, &notes, PAGE_ENCODING, 0); 116 /* Concatenate commit message and notes in msgbuf */
117 struct strbuf msgbuf = STRBUF_INIT;
118 if (info->msg && *(info->msg)) {
119 strbuf_addstr(&msgbuf, info->msg);
120 strbuf_addch(&msgbuf, '\n');
121 }
122 format_note(NULL, commit->object.sha1, &msgbuf, PAGE_ENCODING,
123 NOTES_SHOW_HEADER | NOTES_INDENT);
124 strbuf_addch(&msgbuf, '\n');
125 strbuf_ltrim(&msgbuf);
117 126
118 if (ctx.repo->enable_log_filecount) { 127 if (ctx.repo->enable_log_filecount) {
119 cols++; 128 cols++;
120 if (ctx.repo->enable_log_linecount) 129 if (ctx.repo->enable_log_linecount)
121 cols++; 130 cols++;
122 } 131 }
132
133 /* Create second table row containing msgbuf */
123 htmlf("<tr class='nohover'><td/><td colspan='%d' class='logmsg'>", 134 htmlf("<tr class='nohover'><td/><td colspan='%d' class='logmsg'>",
124 cols); 135 cols);
125 html_txt(info->msg); 136 html_txt(msgbuf.buf);
126 html("</td></tr>\n"); 137 html("</td></tr>\n");
127 if (notes.len != 0) { 138 strbuf_release(&msgbuf);
128 html("<tr class='nohover'>");
129 html("<td class='lognotes-label'>Notes:</td>");
130 htmlf("<td colspan='%d' class='lognotes'>",
131 cols);
132 html_txt(notes.buf);
133 html("</td></tr>\n");
134 }
135 strbuf_release(&notes);
136 } 139 }
140
137 cgit_free_commitinfo(info); 141 cgit_free_commitinfo(info);
138} 142}
139 143
140static const char *disambiguate_ref(const char *ref) 144static const char *disambiguate_ref(const char *ref)
141{ 145{
142 unsigned char sha1[20]; 146 unsigned char sha1[20];
143 const char *longref; 147 const char *longref;
144 148
145 longref = fmt("refs/heads/%s", ref); 149 longref = fmt("refs/heads/%s", ref);
146 if (get_sha1(longref, sha1) == 0) 150 if (get_sha1(longref, sha1) == 0)
147 return longref; 151 return longref;
148 152
149 return ref; 153 return ref;
150} 154}
151 155
152static char *next_token(char **src) 156static char *next_token(char **src)
153{ 157{
154 char *result; 158 char *result;
155 159
156 if (!src || !*src) 160 if (!src || !*src)
157 return NULL; 161 return NULL;
158 while (isspace(**src)) 162 while (isspace(**src))
159 (*src)++; 163 (*src)++;
160 if (!**src) 164 if (!**src)
161 return NULL; 165 return NULL;
162 result = *src; 166 result = *src;
163 while (**src) { 167 while (**src) {
164 if (isspace(**src)) { 168 if (isspace(**src)) {
165 **src = '\0'; 169 **src = '\0';
166 (*src)++; 170 (*src)++;
167 break; 171 break;
168 } 172 }
169 (*src)++; 173 (*src)++;
170 } 174 }
171 return result; 175 return result;
172} 176}
173 177
174void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern, 178void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern,
175 char *path, int pager) 179 char *path, int pager)
176{ 180{
177 struct rev_info rev; 181 struct rev_info rev;
178 struct commit *commit; 182 struct commit *commit;
179 struct vector vec = VECTOR_INIT(char *); 183 struct vector vec = VECTOR_INIT(char *);
180 int i, columns = 3; 184 int i, columns = 3;
181 char *arg; 185 char *arg;
182 186
183 /* First argv is NULL */ 187 /* First argv is NULL */
184 vector_push(&vec, NULL, 0); 188 vector_push(&vec, NULL, 0);
185 189
186 if (!tip) 190 if (!tip)
187 tip = ctx.qry.head; 191 tip = ctx.qry.head;
188 tip = disambiguate_ref(tip); 192 tip = disambiguate_ref(tip);
189 vector_push(&vec, &tip, 0); 193 vector_push(&vec, &tip, 0);
190 194
191 if (grep && pattern && *pattern) { 195 if (grep && pattern && *pattern) {
192 pattern = xstrdup(pattern); 196 pattern = xstrdup(pattern);
193 if (!strcmp(grep, "grep") || !strcmp(grep, "author") || 197 if (!strcmp(grep, "grep") || !strcmp(grep, "author") ||
194 !strcmp(grep, "committer")) { 198 !strcmp(grep, "committer")) {
195 arg = fmt("--%s=%s", grep, pattern); 199 arg = fmt("--%s=%s", grep, pattern);
196 vector_push(&vec, &arg, 0); 200 vector_push(&vec, &arg, 0);
197 } 201 }
198 if (!strcmp(grep, "range")) { 202 if (!strcmp(grep, "range")) {
199 /* Split the pattern at whitespace and add each token 203 /* Split the pattern at whitespace and add each token
200 * as a revision expression. Do not accept other 204 * as a revision expression. Do not accept other
201 * rev-list options. Also, replace the previously 205 * rev-list options. Also, replace the previously
202 * pushed tip (it's no longer relevant). 206 * pushed tip (it's no longer relevant).
203 */ 207 */
204 vec.count--; 208 vec.count--;
205 while ((arg = next_token(&pattern))) { 209 while ((arg = next_token(&pattern))) {
206 if (*arg == '-') { 210 if (*arg == '-') {
207 fprintf(stderr, "Bad range expr: %s\n", 211 fprintf(stderr, "Bad range expr: %s\n",
208 arg); 212 arg);
209 break; 213 break;
210 } 214 }
211 vector_push(&vec, &arg, 0); 215 vector_push(&vec, &arg, 0);
212 } 216 }
213 } 217 }
214 } 218 }
215 219
216 if (path) { 220 if (path) {
217 arg = "--"; 221 arg = "--";
218 vector_push(&vec, &arg, 0); 222 vector_push(&vec, &arg, 0);
219 vector_push(&vec, &path, 0); 223 vector_push(&vec, &path, 0);
220 } 224 }
221 225
222 /* Make sure the vector is NULL-terminated */ 226 /* Make sure the vector is NULL-terminated */
223 vector_push(&vec, NULL, 0); 227 vector_push(&vec, NULL, 0);
224 vec.count--; 228 vec.count--;
225 229
226 init_revisions(&rev, NULL); 230 init_revisions(&rev, NULL);
227 rev.abbrev = DEFAULT_ABBREV; 231 rev.abbrev = DEFAULT_ABBREV;
228 rev.commit_format = CMIT_FMT_DEFAULT; 232 rev.commit_format = CMIT_FMT_DEFAULT;
229 rev.verbose_header = 1; 233 rev.verbose_header = 1;
230 rev.show_root_diff = 0; 234 rev.show_root_diff = 0;
231 setup_revisions(vec.count, vec.data, &rev, NULL); 235 setup_revisions(vec.count, vec.data, &rev, NULL);
232 load_ref_decorations(DECORATE_FULL_REFS); 236 load_ref_decorations(DECORATE_FULL_REFS);