cgit

commit e238ebe1874e07865b3f38fe8e256e91a6f734a4

Author: Lars Hjemli <hjemli@gmail.com>

ui-diff: add links to pre- and postversion of blobs

Each diff header now links to the old and new version of each file

Signed-off-by: Lars Hjemli <hjemli@gmail.com>

 ui-diff.c | 42 ++++++++++++++++++++++++++----------------


diff --git a/ui-diff.c b/ui-diff.c
index ba0030f587d3957fa75493959cf6519edcb3c779..ac9a3faf6f97f735777ec8ec554a23e4c67ecac9 100644
--- a/ui-diff.c
+++ b/ui-diff.c
@@ -9,6 +9,9 @@
 #include "cgit.h"
 
 
+unsigned char old_rev_sha1[20];
+unsigned char new_rev_sha1[20];
+
 /*
  * print a single line returned from xdiff
  */
@@ -67,9 +70,17 @@ 			if (mode2 != mode1)
 				htmlf("..%.6o", mode2);
 		}
 		html("<br/>--- a/");
-		html_txt(path1);
+		if (mode1 != 0)
+			cgit_tree_link(path1, NULL, NULL, cgit_query_head,
+				       sha1_to_hex(old_rev_sha1), path1);
+		else
+			html_txt(path1);
 		html("<br/>+++ b/");
-		html_txt(path2);
+		if (mode2 != 0)
+			cgit_tree_link(path2, NULL, NULL, cgit_query_head,
+				       sha1_to_hex(new_rev_sha1), path2);
+		else
+			html_txt(path2);
 	}
 	html("</div>");
 }
@@ -91,15 +102,14 @@ }
 
 void cgit_print_diff(const char *new_rev, const char *old_rev, const char *prefix)
 {
-	unsigned char sha1[20], sha2[20];
 	enum object_type type;
 	unsigned long size;
 	struct commit *commit, *commit2;
 
 	if (!new_rev)
 		new_rev = cgit_query_head;
-	get_sha1(new_rev, sha1);
-	type = sha1_object_info(sha1, &size);
+	get_sha1(new_rev, new_rev_sha1);
+	type = sha1_object_info(new_rev_sha1, &size);
 	if (type == OBJ_BAD) {
 		cgit_print_error(fmt("Bad object name: %s", new_rev));
 		return;
@@ -110,30 +120,30 @@ 				     typename(type)));
 		return;
 	}
 
-	commit = lookup_commit_reference(sha1);
+	commit = lookup_commit_reference(new_rev_sha1);
 	if (!commit || parse_commit(commit))
-		cgit_print_error(fmt("Bad commit: %s", sha1_to_hex(sha1)));
+		cgit_print_error(fmt("Bad commit: %s", sha1_to_hex(new_rev_sha1)));
 
 	if (old_rev)
-		get_sha1(old_rev, sha2);
+		get_sha1(old_rev, old_rev_sha1);
 	else if (commit->parents && commit->parents->item)
-		hashcpy(sha2, commit->parents->item->object.sha1);
+		hashcpy(old_rev_sha1, commit->parents->item->object.sha1);
 	else
-		hashclr(sha2);
+		hashclr(old_rev_sha1);
 
-	if (!is_null_sha1(sha2)) {
-		type = sha1_object_info(sha2, &size);
+	if (!is_null_sha1(old_rev_sha1)) {
+		type = sha1_object_info(old_rev_sha1, &size);
 		if (type == OBJ_BAD) {
-			cgit_print_error(fmt("Bad object name: %s", sha1_to_hex(sha2)));
+			cgit_print_error(fmt("Bad object name: %s", sha1_to_hex(old_rev_sha1)));
 			return;
 		}
-		commit2 = lookup_commit_reference(sha2);
+		commit2 = lookup_commit_reference(old_rev_sha1);
 		if (!commit2 || parse_commit(commit2))
-			cgit_print_error(fmt("Bad commit: %s", sha1_to_hex(sha2)));
+			cgit_print_error(fmt("Bad commit: %s", sha1_to_hex(old_rev_sha1)));
 	}
 	html("<table class='diff'>");
 	html("<tr><td>");
-	cgit_diff_tree(sha2, sha1, filepair_cb, prefix);
+	cgit_diff_tree(old_rev_sha1, new_rev_sha1, filepair_cb, prefix);
 	html("</td></tr>");
 	html("</table>");
 }