summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.css66
-rw-r--r--ui-diff.c27
-rw-r--r--ui-ssdiff.c30
-rw-r--r--ui-ssdiff.h3
4 files changed, 96 insertions, 30 deletions
diff --git a/cgit.css b/cgit.css
index bf58b8a..3f37165 100644
--- a/cgit.css
+++ b/cgit.css
@@ -604,5 +604,19 @@ table.hgraph div.bar {
+table.ssdiff {
+ width: 100%;
+}
+
+table.ssdiff td {
+ font-size: 75%;
+ font-family: monospace;
+ white-space: pre;
+ padding: 1px 4px 1px 4px;
+ border-left: solid 1px #aaa;
+ border-right: solid 1px #aaa;
+}
+
table.ssdiff td.add {
color: black;
- background: #afa;
+ background: #cfc;
+ min-width: 50%;
}
@@ -611,3 +625,4 @@ table.ssdiff td.add_dark {
color: black;
- background: #9c9;
+ background: #aca;
+ min-width: 50%;
}
@@ -616,3 +631,4 @@ table.ssdiff td.del {
color: black;
- background: #faa;
+ background: #fcc;
+ min-width: 50%;
}
@@ -621,3 +637,4 @@ table.ssdiff td.del_dark {
color: black;
- background: #c99;
+ background: #caa;
+ min-width: 50%;
}
@@ -626,3 +643,4 @@ table.ssdiff td.changed {
color: black;
- background: #ffa;
+ background: #ffc;
+ min-width: 50%;
}
@@ -631,3 +649,12 @@ table.ssdiff td.changed_dark {
color: black;
- background: #cc9;
+ background: #cca;
+ min-width: 50%;
+}
+
+table.ssdiff td.lineno {
+ color: black;
+ background: #eee;
+ text-align: right;
+ width: 3em;
+ min-width: 3em;
}
@@ -637,2 +664,29 @@ table.ssdiff td.hunk {
background: #ccf;
+ border-top: solid 1px #aaa;
+ border-bottom: solid 1px #aaa;
}
+
+table.ssdiff td.head {
+ border-top: solid 1px #aaa;
+ border-bottom: solid 1px #aaa;
+}
+
+table.ssdiff td.head div.head {
+ font-weight: bold;
+ color: black;
+}
+
+table.ssdiff td.foot {
+ border-top: solid 1px #aaa;
+ border-left: none;
+ border-right: none;
+ border-bottom: none;
+}
+
+table.ssdiff td.space {
+ border: none;
+}
+
+table.ssdiff td.space div {
+ min-height: 3em;
+} \ No newline at end of file
diff --git a/ui-diff.c b/ui-diff.c
index 42e81ac..b21c2c1 100644
--- a/ui-diff.c
+++ b/ui-diff.c
@@ -248,4 +248,2 @@ static void header(unsigned char *sha1, char *path1, int mode1,
html("</div>");
- if (use_ssdiff)
- cgit_ssdiff_header();
}
@@ -272,13 +270,15 @@ static void filepair_cb(struct diff_filepair *pair)
- header(pair->one->sha1, pair->one->path, pair->one->mode,
- pair->two->sha1, pair->two->path, pair->two->mode);
if (use_ssdiff) {
- cgit_ssdiff_header();
+ cgit_ssdiff_header_begin();
print_line_fn = cgit_ssdiff_line_cb;
}
+ header(pair->one->sha1, pair->one->path, pair->one->mode,
+ pair->two->sha1, pair->two->path, pair->two->mode);
+ if (use_ssdiff)
+ cgit_ssdiff_header_end();
if (S_ISGITLINK(pair->one->mode) || S_ISGITLINK(pair->two->mode)) {
if (S_ISGITLINK(pair->one->mode))
- print_line(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))
- print_line(fmt("+Subproject %s", sha1_to_hex(pair->two->sha1)), 52);
+ print_line_fn(fmt("+Subproject %s", sha1_to_hex(pair->two->sha1)), 52);
return;
@@ -289,3 +289,3 @@ static void filepair_cb(struct diff_filepair *pair)
if (binary)
- html("Binary files differ");
+ print_line_fn(" Binary files differ", 20);
if (use_ssdiff)
@@ -336,6 +336,11 @@ void cgit_print_diff(const char *new_rev, const char *old_rev, const char *prefi
- html("<table summary='diff' class='diff'>");
- html("<tr><td>");
+ if (use_ssdiff) {
+ html("<table summary='ssdiff' class='ssdiff'>");
+ } else {
+ html("<table summary='diff' class='diff'>");
+ html("<tr><td>");
+ }
cgit_diff_tree(old_rev_sha1, new_rev_sha1, filepair_cb, prefix);
- html("</td></tr>");
+ if (!use_ssdiff)
+ html("</td></tr>");
html("</table>");
diff --git a/ui-ssdiff.c b/ui-ssdiff.c
index 3591ab4..8215051 100644
--- a/ui-ssdiff.c
+++ b/ui-ssdiff.c
@@ -42,5 +42,5 @@ static char *replace_tabs(char *line)
char *cur_buf;
- int linelen = strlen(line);
+ int linelen = strlen(line);
int n_tabs = 0;
- int i;
+ int i;
char *result;
@@ -54,6 +54,6 @@ static char *replace_tabs(char *line)
- for (i = 0; i < linelen; i++)
+ for (i = 0; i < linelen; i++)
if (line[i] == '\t')
n_tabs += 1;
- result = xmalloc(linelen + n_tabs * 8 + 1);
+ result = xmalloc(linelen + n_tabs * 8 + 1);
result[0] = '\0';
@@ -108,6 +108,6 @@ static void print_ssdiff_line(char *class, int old_line_no, char *old_line,
if (old_line_no > 0)
- htmlf("<td class='%s'>%d </td><td class='%s'>", class,
+ htmlf("<td class='lineno'>%d</td><td class='%s'>",
old_line_no, class);
else
- htmlf("<td class='%s_dark'> </td><td class='%s_dark'>", class, class);
+ htmlf("<td class='lineno'></td><td class='%s_dark'>", class);
@@ -119,9 +119,9 @@ static void print_ssdiff_line(char *class, int old_line_no, char *old_line,
- html(" </td>");
+ html("</td>");
if (new_line_no > 0)
- htmlf("<td class='%s'> %d </td><td class='%s'>", class,
+ htmlf("<td class='lineno'>%d</td><td class='%s'>",
new_line_no, class);
else
- htmlf("<td class='%s_dark'> </td><td class='%s_dark'>", class, class);
+ htmlf("<td class='lineno'></td><td class='%s_dark'>", class);
@@ -251,3 +251,3 @@ void cgit_ssdiff_line_cb(char *line, int len)
-void cgit_ssdiff_header()
+void cgit_ssdiff_header_begin()
{
@@ -255,3 +255,9 @@ void cgit_ssdiff_header()
current_new_line = 0;
- html("<table class='ssdiff'>");
+ html("<tr><td class='space' colspan='4'><div></div></td></tr>");
+ html("<tr><td class='head' colspan='4'>");
+}
+
+void cgit_ssdiff_header_end()
+{
+ html("</td><tr>");
}
@@ -262,3 +268,3 @@ void cgit_ssdiff_footer()
cgit_ssdiff_print_deferred_lines();
- html("</table>");
+ html("<tr><td class='foot' colspan='4'></td></tr>");
}
diff --git a/ui-ssdiff.h b/ui-ssdiff.h
index a0b1efe..64b4b12 100644
--- a/ui-ssdiff.h
+++ b/ui-ssdiff.h
@@ -7,3 +7,4 @@ extern void cgit_ssdiff_line_cb(char *line, int len);
-extern void cgit_ssdiff_header();
+extern void cgit_ssdiff_header_begin();
+extern void cgit_ssdiff_header_end();