[PATCH 2/3] Allow for creating raw diffs with cgit_print_diff()

Lukas Fleischer cgit at cryptocrack.de
Wed Aug 14 10:50:32 CEST 2013


This adds a parameter to cgit_print_diff() to create raw diffs, using
the same format as `git diff <commit>`.

Signed-off-by: Lukas Fleischer <cgit at cryptocrack.de>
---
 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(&notes);
 	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);
-- 
1.8.4.rc2.477.g1da3ebd



More information about the CGit mailing list