summaryrefslogtreecommitdiffabout
authorLars Hjemli <hjemli@gmail.com>2007-05-14 16:31:05 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2007-05-14 20:43:38 (UTC)
commita342ac6b4d7830f82230b0f6a29bc9378d66747e (patch) (unidiff)
tree49782a205d9eb73c2b63f77cfc554d898681cf1a
parenta1a0cd8b5a62fe779d77c210a3d455398ce06bb7 (diff)
downloadcgit-a342ac6b4d7830f82230b0f6a29bc9378d66747e.zip
cgit-a342ac6b4d7830f82230b0f6a29bc9378d66747e.tar.gz
cgit-a342ac6b4d7830f82230b0f6a29bc9378d66747e.tar.bz2
cgit.css: try to make diffs look a little bit nicer
This makes the diffview look more like 'git-diff' in a terminal. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.css13
-rw-r--r--ui-diff.c32
2 files changed, 32 insertions, 13 deletions
diff --git a/cgit.css b/cgit.css
index 97ae4d1..53c93f2 100644
--- a/cgit.css
+++ b/cgit.css
@@ -249,83 +249,82 @@ table.diffstat tr:hover {
249} 249}
250 250
251table.diffstat th { 251table.diffstat th {
252 font-weight: normal; 252 font-weight: normal;
253 text-align: left; 253 text-align: left;
254 text-decoration: underline; 254 text-decoration: underline;
255 padding: 0.1em 1em 0.1em 0.1em; 255 padding: 0.1em 1em 0.1em 0.1em;
256 font-size: 100%; 256 font-size: 100%;
257} 257}
258 258
259table.diffstat td { 259table.diffstat td {
260 padding: 0.2em 0.2em 0.1em 0.1em; 260 padding: 0.2em 0.2em 0.1em 0.1em;
261 font-size: 100%; 261 font-size: 100%;
262 border: none; 262 border: none;
263} 263}
264 264
265table.diffstat td span.modechange { 265table.diffstat td span.modechange {
266 padding-left: 1em; 266 padding-left: 1em;
267 color: red; 267 color: red;
268} 268}
269 269
270table.diffstat td.add a { 270table.diffstat td.add a {
271 color: green; 271 color: green;
272} 272}
273 273
274table.diffstat td.del a { 274table.diffstat td.del a {
275 color: red; 275 color: red;
276} 276}
277 277
278table.diffstat td.upd a { 278table.diffstat td.upd a {
279 color: blue; 279 color: blue;
280} 280}
281 281
282table.diffstat td.graph { 282table.diffstat td.graph {
283 width: 75%; 283 width: 75%;
284 vertical-align: center; 284 vertical-align: center;
285} 285}
286 286
287table.diffstat td.graph img { 287table.diffstat td.graph img {
288 border: none; 288 border: none;
289 height: 8pt; 289 height: 8pt;
290} 290}
291 291
292div.diffstat-summary { 292div.diffstat-summary {
293 color: #888; 293 color: #888;
294 padding-top: 0.5em; 294 padding-top: 0.5em;
295} 295}
296 296
297table.diff th {
298 padding: 1em 0em 0.1em 0.1em;
299 text-align: left;
300}
301
302table.diff td { 297table.diff td {
303 border: solid 1px black;
304 font-family: monospace; 298 font-family: monospace;
305 white-space: pre; 299 white-space: pre;
306} 300}
307 301
302table.diff td div.head {
303 font-weight: bold;
304 padding-top: 1em;
305}
306
308table.diff td div.hunk { 307table.diff td div.hunk {
309 background: #ccc; 308 color: #009;
310} 309}
311 310
312table.diff td div.add { 311table.diff td div.add {
313 color: green; 312 color: green;
314} 313}
315 314
316table.diff td div.del { 315table.diff td div.del {
317 color: red; 316 color: red;
318} 317}
319 318
320.sha1 { 319.sha1 {
321 font-family: courier; 320 font-family: courier;
322 font-size: 90%; 321 font-size: 90%;
323} 322}
324 323
325.left { 324.left {
326 text-align: left; 325 text-align: left;
327} 326}
328 327
329.right { 328.right {
330 text-align: right; 329 text-align: right;
331} 330}
diff --git a/ui-diff.c b/ui-diff.c
index 10330d3..7ec5701 100644
--- a/ui-diff.c
+++ b/ui-diff.c
@@ -1,82 +1,102 @@
1/* ui-diff.c: show diff between two blobs 1/* ui-diff.c: show diff between two blobs
2 * 2 *
3 * Copyright (C) 2006 Lars Hjemli 3 * Copyright (C) 2006 Lars Hjemli
4 * 4 *
5 * Licensed under GNU General Public License v2 5 * Licensed under GNU General Public License v2
6 * (see COPYING for full license text) 6 * (see COPYING for full license text)
7 */ 7 */
8 8
9#include "cgit.h" 9#include "cgit.h"
10 10
11 11
12/* 12/*
13 * print a single line returned from xdiff 13 * print a single line returned from xdiff
14 */ 14 */
15static void print_line(char *line, int len) 15static void print_line(char *line, int len)
16{ 16{
17 char *class = "ctx"; 17 char *class = "ctx";
18 char c = line[len-1]; 18 char c = line[len-1];
19 19
20 if (line[0] == '+') 20 if (line[0] == '+')
21 class = "add"; 21 class = "add";
22 else if (line[0] == '-') 22 else if (line[0] == '-')
23 class = "del"; 23 class = "del";
24 else if (line[0] == '@') 24 else if (line[0] == '@')
25 class = "hunk"; 25 class = "hunk";
26 26
27 htmlf("<div class='%s'>", class); 27 htmlf("<div class='%s'>", class);
28 line[len-1] = '\0'; 28 line[len-1] = '\0';
29 html_txt(line); 29 html_txt(line);
30 html("</div>"); 30 html("</div>");
31 line[len-1] = c; 31 line[len-1] = c;
32} 32}
33 33
34static void filepair_cb(struct diff_filepair *pair) 34static void header(unsigned char *sha1, char *path1,
35 unsigned char *sha2, char *path2)
35{ 36{
36 html("<tr><th>"); 37 char *abbrev1, *abbrev2;
37 html_txt(pair->two->path); 38
38 html("</th></tr>");
39 html("<tr><td>"); 39 html("<tr><td>");
40 html("<div class='head'>");
41 html("diff --git a/");
42 html_txt(path1);
43 html(" b/");
44 html_txt(path2);
45 abbrev1 = xstrdup(find_unique_abbrev(sha1, DEFAULT_ABBREV));
46 abbrev2 = xstrdup(find_unique_abbrev(sha2, DEFAULT_ABBREV));
47 htmlf("\nindex %s..%s", abbrev1, abbrev2);
48 free(abbrev1);
49 free(abbrev2);
50 html("\n--- a/");
51 html_txt(path1);
52 html("\n+++ b/");
53 html_txt(path2);
54 html("</div>");
55}
56
57static void filepair_cb(struct diff_filepair *pair)
58{
59 header(pair->one->sha1, pair->one->path,
60 pair->two->sha1, pair->two->path);
40 if (cgit_diff_files(pair->one->sha1, pair->two->sha1, print_line)) 61 if (cgit_diff_files(pair->one->sha1, pair->two->sha1, print_line))
41 cgit_print_error("Error running diff"); 62 cgit_print_error("Error running diff");
42 html("</tr></td>"); 63 html("</tr></td>");
43} 64}
44 65
45void cgit_print_diff(const char *old_hex, const char *new_hex, char *path) 66void cgit_print_diff(const char *old_hex, const char *new_hex, char *path)
46{ 67{
47 unsigned char sha1[20], sha2[20]; 68 unsigned char sha1[20], sha2[20];
48 enum object_type type; 69 enum object_type type;
49 unsigned long size; 70 unsigned long size;
50 71
51 get_sha1(old_hex, sha1); 72 get_sha1(old_hex, sha1);
52 get_sha1(new_hex, sha2); 73 get_sha1(new_hex, sha2);
53 74
54 type = sha1_object_info(sha1, &size); 75 type = sha1_object_info(sha1, &size);
55 if (type == OBJ_BAD) { 76 if (type == OBJ_BAD) {
56 type = sha1_object_info(sha2, &size); 77 type = sha1_object_info(sha2, &size);
57 if (type == OBJ_BAD) { 78 if (type == OBJ_BAD) {
58 cgit_print_error(fmt("Bad object names: %s, %s", old_hex, new_hex)); 79 cgit_print_error(fmt("Bad object names: %s, %s", old_hex, new_hex));
59 return; 80 return;
60 } 81 }
61 } 82 }
62 83
63 html("<table class='diff'>"); 84 html("<table class='diff'>");
64 switch(type) { 85 switch(type) {
65 case OBJ_BLOB: 86 case OBJ_BLOB:
66 if (path)
67 htmlf("<tr><th>%s</th></tr>", path);
68 html("<tr><td>"); 87 html("<tr><td>");
88 header(sha1, path, sha2, path);
69 if (cgit_diff_files(sha1, sha2, print_line)) 89 if (cgit_diff_files(sha1, sha2, print_line))
70 cgit_print_error("Error running diff"); 90 cgit_print_error("Error running diff");
71 html("</tr></td>"); 91 html("</tr></td>");
72 break; 92 break;
73 case OBJ_TREE: 93 case OBJ_TREE:
74 cgit_diff_tree(sha1, sha2, filepair_cb); 94 cgit_diff_tree(sha1, sha2, filepair_cb);
75 break; 95 break;
76 default: 96 default:
77 cgit_print_error(fmt("Unhandled object type: %s", 97 cgit_print_error(fmt("Unhandled object type: %s",
78 typename(type))); 98 typename(type)));
79 break; 99 break;
80 } 100 }
81 html("</td></tr></table>"); 101 html("</td></tr></table>");
82} 102}