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>
This commit is contained in:
Ragnar Ouchterlony 2009-09-16 18:56:26 +02:00 committed by Lars Hjemli
parent 207cc34711
commit 4a198e4b8e
2 changed files with 16 additions and 6 deletions

View File

@ -253,11 +253,11 @@ static void print_ssdiff_link()
if (!strcmp(ctx.qry.page, "diff")) { if (!strcmp(ctx.qry.page, "diff")) {
if (use_ssdiff) if (use_ssdiff)
cgit_diff_link("Unidiff", NULL, NULL, ctx.qry.head, cgit_diff_link("Unidiff", NULL, NULL, ctx.qry.head,
ctx.qry.sha1, ctx.qry.sha2, NULL, 1); ctx.qry.sha1, ctx.qry.sha2, ctx.qry.path, 1);
else else
cgit_diff_link("Side-by-side diff", NULL, NULL, cgit_diff_link("Side-by-side diff", NULL, NULL,
ctx.qry.head, ctx.qry.sha1, ctx.qry.head, ctx.qry.sha1,
ctx.qry.sha2, NULL, 1); ctx.qry.sha2, ctx.qry.path, 1);
} }
} }
@ -281,13 +281,19 @@ static void filepair_cb(struct diff_filepair *pair)
print_line_fn(fmt("-Subproject %s", sha1_to_hex(pair->one->sha1)), 52); print_line_fn(fmt("-Subproject %s", sha1_to_hex(pair->one->sha1)), 52);
if (S_ISGITLINK(pair->two->mode)) if (S_ISGITLINK(pair->two->mode))
print_line_fn(fmt("+Subproject %s", sha1_to_hex(pair->two->sha1)), 52); print_line_fn(fmt("+Subproject %s", sha1_to_hex(pair->two->sha1)), 52);
if (use_ssdiff)
cgit_ssdiff_footer();
return; return;
} }
if (cgit_diff_files(pair->one->sha1, pair->two->sha1, &old_size, if (cgit_diff_files(pair->one->sha1, pair->two->sha1, &old_size,
&new_size, &binary, print_line_fn)) &new_size, &binary, print_line_fn))
cgit_print_error("Error running diff"); cgit_print_error("Error running diff");
if (binary) if (binary) {
print_line_fn(" Binary files differ", 20); if (use_ssdiff)
html("<tr><td colspan='4'>Binary files differ</td></tr>");
else
html("Binary files differ");
}
if (use_ssdiff) if (use_ssdiff)
cgit_ssdiff_footer(); cgit_ssdiff_footer();
} }

View File

@ -108,6 +108,8 @@ static void print_ssdiff_line(char *class, int old_line_no, char *old_line,
if (old_line_no > 0) if (old_line_no > 0)
htmlf("<td class='lineno'>%d</td><td class='%s'>", htmlf("<td class='lineno'>%d</td><td class='%s'>",
old_line_no, class); old_line_no, class);
else if (old_line)
htmlf("<td class='lineno'></td><td class='%s'>", class);
else else
htmlf("<td class='lineno'></td><td class='%s_dark'>", class); htmlf("<td class='lineno'></td><td class='%s_dark'>", class);
@ -122,6 +124,8 @@ static void print_ssdiff_line(char *class, int old_line_no, char *old_line,
if (new_line_no > 0) if (new_line_no > 0)
htmlf("<td class='lineno'>%d</td><td class='%s'>", htmlf("<td class='lineno'>%d</td><td class='%s'>",
new_line_no, class); new_line_no, class);
else if (new_line)
htmlf("<td class='lineno'></td><td class='%s'>", class);
else else
htmlf("<td class='lineno'></td><td class='%s_dark'>", class); htmlf("<td class='lineno'></td><td class='%s_dark'>", class);
@ -251,8 +255,8 @@ void cgit_ssdiff_line_cb(char *line, int len)
void cgit_ssdiff_header_begin() void cgit_ssdiff_header_begin()
{ {
current_old_line = 0; current_old_line = -1;
current_new_line = 0; current_new_line = -1;
html("<tr><td class='space' colspan='4'><div></div></td></tr>"); html("<tr><td class='space' colspan='4'><div></div></td></tr>");
html("<tr><td class='head' colspan='4'>"); html("<tr><td class='head' colspan='4'>");
} }