|
diff --git a/ui-diff.c b/ui-diff.c index 96106af..10330d3 100644 --- a/ ui-diff.c+++ b/ ui-diff.c |
|
@@ -31,15 +31,52 @@ static void print_line(char *line, int len) |
31 | line[len-1] = c; |
31 | line[len-1] = c; |
32 | } |
32 | } |
33 | |
33 | |
34 | void cgit_print_diff(const char *old_hex, const char *new_hex) |
34 | static void filepair_cb(struct diff_filepair *pair) |
| |
35 | { |
| |
36 | html("<tr><th>"); |
| |
37 | html_txt(pair->two->path); |
| |
38 | html("</th></tr>"); |
| |
39 | html("<tr><td>"); |
| |
40 | if (cgit_diff_files(pair->one->sha1, pair->two->sha1, print_line)) |
| |
41 | cgit_print_error("Error running diff"); |
| |
42 | html("</tr></td>"); |
| |
43 | } |
| |
44 | |
| |
45 | void cgit_print_diff(const char *old_hex, const char *new_hex, char *path) |
35 | { |
46 | { |
36 | unsigned char sha1[20], sha2[20]; |
47 | unsigned char sha1[20], sha2[20]; |
| |
48 | enum object_type type; |
| |
49 | unsigned long size; |
37 | |
50 | |
38 | get_sha1(old_hex, sha1); |
51 | get_sha1(old_hex, sha1); |
39 | get_sha1(new_hex, sha2); |
52 | get_sha1(new_hex, sha2); |
40 | |
53 | |
41 | html("<table class='diff'><tr><td>"); |
54 | type = sha1_object_info(sha1, &size); |
42 | if (cgit_diff_files(sha1, sha2, print_line)) |
55 | if (type == OBJ_BAD) { |
43 | cgit_print_error("Error running diff"); |
56 | type = sha1_object_info(sha2, &size); |
| |
57 | if (type == OBJ_BAD) { |
| |
58 | cgit_print_error(fmt("Bad object names: %s, %s", old_hex, new_hex)); |
| |
59 | return; |
| |
60 | } |
| |
61 | } |
| |
62 | |
| |
63 | html("<table class='diff'>"); |
| |
64 | switch(type) { |
| |
65 | case OBJ_BLOB: |
| |
66 | if (path) |
| |
67 | htmlf("<tr><th>%s</th></tr>", path); |
| |
68 | html("<tr><td>"); |
| |
69 | if (cgit_diff_files(sha1, sha2, print_line)) |
| |
70 | cgit_print_error("Error running diff"); |
| |
71 | html("</tr></td>"); |
| |
72 | break; |
| |
73 | case OBJ_TREE: |
| |
74 | cgit_diff_tree(sha1, sha2, filepair_cb); |
| |
75 | break; |
| |
76 | default: |
| |
77 | cgit_print_error(fmt("Unhandled object type: %s", |
| |
78 | typename(type))); |
| |
79 | break; |
| |
80 | } |
44 | html("</td></tr></table>"); |
81 | html("</td></tr></table>"); |
45 | } |
82 | } |
|