X-Git-Url: https://gitweb.ps.run/ps-cgit/blobdiff_plain/69f705cf5727cc1f099f6cd6af759f66bfd9a343..f8f6e1fe789e9dbcea40a0f8d5ebfb019c2a1a19:/ui-diff.c
diff --git a/ui-diff.c b/ui-diff.c
index 7ff7e46..868ceec 100644
--- a/ui-diff.c
+++ b/ui-diff.c
@@ -34,6 +34,17 @@ static struct fileinfo {
} *items;
static int use_ssdiff = 0;
+static struct diff_filepair *current_filepair;
+
+struct diff_filespec *cgit_get_current_old_file(void)
+{
+ return current_filepair->one;
+}
+
+struct diff_filespec *cgit_get_current_new_file(void)
+{
+ return current_filepair->two;
+}
static void print_fileinfo(struct fileinfo *info)
{
@@ -156,26 +167,16 @@ static void inspect_filepair(struct diff_filepair *pair)
void cgit_print_diffstat(const unsigned char *old_sha1,
const unsigned char *new_sha1, const char *prefix)
{
- int i, save_context = ctx.qry.context;
+ int i;
html("
");
html("");
max_changes = 0;
@@ -264,19 +265,6 @@ static void header(unsigned char *sha1, char *path1, int mode1,
html("");
}
-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, ctx.qry.path, 1);
- else
- cgit_diff_link("Side-by-side diff", NULL, NULL,
- ctx.qry.head, ctx.qry.sha1,
- ctx.qry.sha2, ctx.qry.path, 1);
- }
-}
-
static void filepair_cb(struct diff_filepair *pair)
{
unsigned long old_size = 0;
@@ -284,6 +272,7 @@ static void filepair_cb(struct diff_filepair *pair)
int binary = 0;
linediff_fn print_line_fn = print_line;
+ current_filepair = pair;
if (use_ssdiff) {
cgit_ssdiff_header_begin();
print_line_fn = cgit_ssdiff_line_cb;
@@ -315,7 +304,56 @@ static void filepair_cb(struct diff_filepair *pair)
cgit_ssdiff_footer();
}
-void cgit_print_diff(const char *new_rev, const char *old_rev, const char *prefix)
+void cgit_print_diff_ctrls()
+{
+ int i, curr;
+
+ html("");
+ html("
diff options");
+ html("
");
+ html("
");
+}
+
+void cgit_print_diff(const char *new_rev, const char *old_rev,
+ const char *prefix, int show_ctrls)
{
enum object_type type;
unsigned long size;
@@ -330,8 +368,10 @@ void cgit_print_diff(const char *new_rev, const char *old_rev, const char *prefi
return;
}
commit = lookup_commit_reference(new_rev_sha1);
- if (!commit || parse_commit(commit))
+ if (!commit || parse_commit(commit)) {
cgit_print_error(fmt("Bad commit: %s", sha1_to_hex(new_rev_sha1)));
+ return;
+ }
if (old_rev)
get_sha1(old_rev, old_rev_sha1);
@@ -347,14 +387,18 @@ void cgit_print_diff(const char *new_rev, const char *old_rev, const char *prefi
return;
}
commit2 = lookup_commit_reference(old_rev_sha1);
- if (!commit2 || parse_commit(commit2))
+ if (!commit2 || parse_commit(commit2)) {
cgit_print_error(fmt("Bad commit: %s", sha1_to_hex(old_rev_sha1)));
+ return;
+ }
}
if ((ctx.qry.ssdiff && !ctx.cfg.ssdiff) || (!ctx.qry.ssdiff && ctx.cfg.ssdiff))
use_ssdiff = 1;
- print_ssdiff_link();
+ if (show_ctrls)
+ cgit_print_diff_ctrls();
+
cgit_print_diffstat(old_rev_sha1, new_rev_sha1, prefix);
if (use_ssdiff) {