summaryrefslogtreecommitdiffabout
authorRagnar Ouchterlony <ragnar@lysator.liu.se>2009-09-16 16:56:26 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2009-09-16 18:17:56 (UTC)
commit4a198e4b8ee62a9a8b5156a46bfce46dc7223fe9 (patch) (unidiff)
treec6389de8ae75cf907ed3884e87ee554d80498145
parent207cc34711039329b41345f716bf421a88a6fd0a (diff)
downloadcgit-4a198e4b8ee62a9a8b5156a46bfce46dc7223fe9.zip
cgit-4a198e4b8ee62a9a8b5156a46bfce46dc7223fe9.tar.gz
cgit-4a198e4b8ee62a9a8b5156a46bfce46dc7223fe9.tar.bz2
Fixed side-by-side diff bugs related to binary diff and more.
The fixed bugs: * "Binary files differ" did not show up either in unidiff or side-by-side-diff. * Subproject diffs did not work for side-by-side diffs. * The ssdiff link on diff pages did not conserve the path. Signed-off-by: Ragnar Ouchterlony <ragnar@lysator.liu.se> Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--ui-diff.c14
-rw-r--r--ui-ssdiff.c8
2 files changed, 16 insertions, 6 deletions
diff --git a/ui-diff.c b/ui-diff.c
index b21c2c1..a92a768 100644
--- a/ui-diff.c
+++ b/ui-diff.c
@@ -250,17 +250,17 @@ static void header(unsigned char *sha1, char *path1, int mode1,
250 250
251static void print_ssdiff_link() 251static void print_ssdiff_link()
252{ 252{
253 if (!strcmp(ctx.qry.page, "diff")) { 253 if (!strcmp(ctx.qry.page, "diff")) {
254 if (use_ssdiff) 254 if (use_ssdiff)
255 cgit_diff_link("Unidiff", NULL, NULL, ctx.qry.head, 255 cgit_diff_link("Unidiff", NULL, NULL, ctx.qry.head,
256 ctx.qry.sha1, ctx.qry.sha2, NULL, 1); 256 ctx.qry.sha1, ctx.qry.sha2, ctx.qry.path, 1);
257 else 257 else
258 cgit_diff_link("Side-by-side diff", NULL, NULL, 258 cgit_diff_link("Side-by-side diff", NULL, NULL,
259 ctx.qry.head, ctx.qry.sha1, 259 ctx.qry.head, ctx.qry.sha1,
260 ctx.qry.sha2, NULL, 1); 260 ctx.qry.sha2, ctx.qry.path, 1);
261 } 261 }
262} 262}
263 263
264static void filepair_cb(struct diff_filepair *pair) 264static void filepair_cb(struct diff_filepair *pair)
265{ 265{
266 unsigned long old_size = 0; 266 unsigned long old_size = 0;
@@ -278,19 +278,25 @@ static void filepair_cb(struct diff_filepair *pair)
278 cgit_ssdiff_header_end(); 278 cgit_ssdiff_header_end();
279 if (S_ISGITLINK(pair->one->mode) || S_ISGITLINK(pair->two->mode)) { 279 if (S_ISGITLINK(pair->one->mode) || S_ISGITLINK(pair->two->mode)) {
280 if (S_ISGITLINK(pair->one->mode)) 280 if (S_ISGITLINK(pair->one->mode))
281 print_line_fn(fmt("-Subproject %s", sha1_to_hex(pair->one->sha1)), 52); 281 print_line_fn(fmt("-Subproject %s", sha1_to_hex(pair->one->sha1)), 52);
282 if (S_ISGITLINK(pair->two->mode)) 282 if (S_ISGITLINK(pair->two->mode))
283 print_line_fn(fmt("+Subproject %s", sha1_to_hex(pair->two->sha1)), 52); 283 print_line_fn(fmt("+Subproject %s", sha1_to_hex(pair->two->sha1)), 52);
284 if (use_ssdiff)
285 cgit_ssdiff_footer();
284 return; 286 return;
285 } 287 }
286 if (cgit_diff_files(pair->one->sha1, pair->two->sha1, &old_size, 288 if (cgit_diff_files(pair->one->sha1, pair->two->sha1, &old_size,
287 &new_size, &binary, print_line_fn)) 289 &new_size, &binary, print_line_fn))
288 cgit_print_error("Error running diff"); 290 cgit_print_error("Error running diff");
289 if (binary) 291 if (binary) {
290 print_line_fn(" Binary files differ", 20); 292 if (use_ssdiff)
293 html("<tr><td colspan='4'>Binary files differ</td></tr>");
294 else
295 html("Binary files differ");
296 }
291 if (use_ssdiff) 297 if (use_ssdiff)
292 cgit_ssdiff_footer(); 298 cgit_ssdiff_footer();
293} 299}
294 300
295void cgit_print_diff(const char *new_rev, const char *old_rev, const char *prefix) 301void cgit_print_diff(const char *new_rev, const char *old_rev, const char *prefix)
296{ 302{
diff --git a/ui-ssdiff.c b/ui-ssdiff.c
index 8215051..5673642 100644
--- a/ui-ssdiff.c
+++ b/ui-ssdiff.c
@@ -105,12 +105,14 @@ static void print_ssdiff_line(char *class, int old_line_no, char *old_line,
105 int new_line_no, char *new_line) 105 int new_line_no, char *new_line)
106{ 106{
107 html("<tr>"); 107 html("<tr>");
108 if (old_line_no > 0) 108 if (old_line_no > 0)
109 htmlf("<td class='lineno'>%d</td><td class='%s'>", 109 htmlf("<td class='lineno'>%d</td><td class='%s'>",
110 old_line_no, class); 110 old_line_no, class);
111 else if (old_line)
112 htmlf("<td class='lineno'></td><td class='%s'>", class);
111 else 113 else
112 htmlf("<td class='lineno'></td><td class='%s_dark'>", class); 114 htmlf("<td class='lineno'></td><td class='%s_dark'>", class);
113 115
114 if (old_line) { 116 if (old_line) {
115 old_line = replace_tabs(old_line + 1); 117 old_line = replace_tabs(old_line + 1);
116 html_txt(old_line); 118 html_txt(old_line);
@@ -119,12 +121,14 @@ static void print_ssdiff_line(char *class, int old_line_no, char *old_line,
119 121
120 html("</td>"); 122 html("</td>");
121 123
122 if (new_line_no > 0) 124 if (new_line_no > 0)
123 htmlf("<td class='lineno'>%d</td><td class='%s'>", 125 htmlf("<td class='lineno'>%d</td><td class='%s'>",
124 new_line_no, class); 126 new_line_no, class);
127 else if (new_line)
128 htmlf("<td class='lineno'></td><td class='%s'>", class);
125 else 129 else
126 htmlf("<td class='lineno'></td><td class='%s_dark'>", class); 130 htmlf("<td class='lineno'></td><td class='%s_dark'>", class);
127 131
128 if (new_line) { 132 if (new_line) {
129 new_line = replace_tabs(new_line + 1); 133 new_line = replace_tabs(new_line + 1);
130 html_txt(new_line); 134 html_txt(new_line);
@@ -248,14 +252,14 @@ void cgit_ssdiff_line_cb(char *line, int len)
248 } 252 }
249 line[len - 1] = c; 253 line[len - 1] = c;
250} 254}
251 255
252void cgit_ssdiff_header_begin() 256void cgit_ssdiff_header_begin()
253{ 257{
254 current_old_line = 0; 258 current_old_line = -1;
255 current_new_line = 0; 259 current_new_line = -1;
256 html("<tr><td class='space' colspan='4'><div></div></td></tr>"); 260 html("<tr><td class='space' colspan='4'><div></div></td></tr>");
257 html("<tr><td class='head' colspan='4'>"); 261 html("<tr><td class='head' colspan='4'>");
258} 262}
259 263
260void cgit_ssdiff_header_end() 264void cgit_ssdiff_header_end()
261{ 265{