]> granicus.if.org Git - cgit/commitdiff
Fixed side-by-side diff bugs related to binary diff and more.
authorRagnar Ouchterlony <ragnar@lysator.liu.se>
Wed, 16 Sep 2009 16:56:26 +0000 (18:56 +0200)
committerLars Hjemli <hjemli@gmail.com>
Wed, 16 Sep 2009 18:17:56 +0000 (20:17 +0200)
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>
ui-diff.c
ui-ssdiff.c

index b21c2c16a2c6e8a33465c550704ad36e3ce46e82..a92a768db1b7f10b9201b9744852a091a05cf928 100644 (file)
--- a/ui-diff.c
+++ b/ui-diff.c
@@ -253,11 +253,11 @@ static void print_ssdiff_link()
        if (!strcmp(ctx.qry.page, "diff")) {
                if (use_ssdiff)
                        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
                        cgit_diff_link("Side-by-side diff", NULL, NULL,
                                       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);
                if (S_ISGITLINK(pair->two->mode))
                        print_line_fn(fmt("+Subproject %s", sha1_to_hex(pair->two->sha1)), 52);
+               if (use_ssdiff)
+                       cgit_ssdiff_footer();
                return;
        }
        if (cgit_diff_files(pair->one->sha1, pair->two->sha1, &old_size,
                            &new_size, &binary, print_line_fn))
                cgit_print_error("Error running diff");
-       if (binary)
-               print_line_fn(" Binary files differ", 20);
+       if (binary) {
+               if (use_ssdiff)
+                       html("<tr><td colspan='4'>Binary files differ</td></tr>");
+               else
+                       html("Binary files differ");
+       }
        if (use_ssdiff)
                cgit_ssdiff_footer();
 }
index 82150516602073bcb6470c292327af0968fb3808..56736427a6bdd641278ff877aa3979d880e9fba7 100644 (file)
@@ -108,6 +108,8 @@ static void print_ssdiff_line(char *class, int old_line_no, char *old_line,
        if (old_line_no > 0)
                htmlf("<td class='lineno'>%d</td><td class='%s'>",
                      old_line_no, class);
+       else if (old_line)
+               htmlf("<td class='lineno'></td><td class='%s'>", class);
        else
                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)
                htmlf("<td class='lineno'>%d</td><td class='%s'>",
                      new_line_no, class);
+       else if (new_line)
+               htmlf("<td class='lineno'></td><td class='%s'>", class);
        else
                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()
 {
-       current_old_line = 0;
-       current_new_line = 0;
+       current_old_line = -1;
+       current_new_line = -1;
        html("<tr><td class='space' colspan='4'><div></div></td></tr>");
        html("<tr><td class='head' colspan='4'>");
 }