about summary refs log tree commit
diff options
context:
space:
mode:
-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
@@ -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();
 }
diff --git a/ui-ssdiff.c b/ui-ssdiff.c
index 8215051..5673642 100644
--- a/ui-ssdiff.c
+++ b/ui-ssdiff.c
@@ -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'>");
 }