From 9003cc172a4cbc6678f3d8003ae1ad3a55f62fed Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Wed, 14 Aug 2013 10:50:32 +0200 Subject: Allow for creating raw diffs with cgit_print_diff() This adds a parameter to cgit_print_diff() to create raw diffs, using the same format as `git diff `. Signed-off-by: Lukas Fleischer --- cmd.c | 2 +- ui-commit.c | 2 +- ui-diff.c | 10 +++++++++- ui-diff.h | 2 +- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/cmd.c b/cmd.c index abe8e46..10761ce 100644 --- a/cmd.c +++ b/cmd.c @@ -57,7 +57,7 @@ static void commit_fn(struct cgit_context *ctx) static void diff_fn(struct cgit_context *ctx) { - cgit_print_diff(ctx->qry.sha1, ctx->qry.sha2, ctx->qry.path, 1); + cgit_print_diff(ctx->qry.sha1, ctx->qry.sha2, ctx->qry.path, 1, 0); } static void info_fn(struct cgit_context *ctx) diff --git a/ui-commit.c b/ui-commit.c index a5a6ea8..ef85a49 100644 --- a/ui-commit.c +++ b/ui-commit.c @@ -137,7 +137,7 @@ void cgit_print_commit(char *hex, const char *prefix) tmp = sha1_to_hex(commit->parents->item->object.sha1); else tmp = NULL; - cgit_print_diff(ctx.qry.sha1, tmp, prefix, 0); + cgit_print_diff(ctx.qry.sha1, tmp, prefix, 0, 0); } strbuf_release(¬es); cgit_free_commitinfo(info); diff --git a/ui-diff.c b/ui-diff.c index 8b38209..838db8c 100644 --- a/ui-diff.c +++ b/ui-diff.c @@ -358,7 +358,7 @@ void cgit_print_diff_ctrls() } void cgit_print_diff(const char *new_rev, const char *old_rev, - const char *prefix, int show_ctrls) + const char *prefix, int show_ctrls, int raw) { enum object_type type; unsigned long size; @@ -398,6 +398,14 @@ void cgit_print_diff(const char *new_rev, const char *old_rev, } } + if (raw) { + ctx.page.mimetype = "text/plain"; + cgit_print_http_headers(&ctx); + cgit_diff_tree(old_rev_sha1, new_rev_sha1, filepair_cb_raw, + prefix, 0); + return; + } + use_ssdiff = ctx.qry.has_ssdiff ? ctx.qry.ssdiff : ctx.cfg.ssdiff; if (show_ctrls) diff --git a/ui-diff.h b/ui-diff.h index 25a9296..04f9029 100644 --- a/ui-diff.h +++ b/ui-diff.h @@ -4,7 +4,7 @@ extern void cgit_print_diff_ctrls(); extern void cgit_print_diff(const char *new_hex, const char *old_hex, - const char *prefix, int show_ctrls); + const char *prefix, int show_ctrls, int raw); extern struct diff_filespec *cgit_get_current_old_file(void); extern struct diff_filespec *cgit_get_current_new_file(void); -- cgit 1.4.1