]> granicus.if.org Git - cgit/commitdiff
Allow for creating raw diffs with cgit_print_diff()
authorLukas Fleischer <cgit@cryptocrack.de>
Wed, 14 Aug 2013 08:50:32 +0000 (10:50 +0200)
committerJason A. Donenfeld <Jason@zx2c4.com>
Fri, 16 Aug 2013 19:15:37 +0000 (13:15 -0600)
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@cryptocrack.de>
cmd.c
ui-commit.c
ui-diff.c
ui-diff.h

diff --git a/cmd.c b/cmd.c
index abe8e46098c0a284cb412b4328a5e9d33950566f..10761ce74fc24510722160da1edb911777ae25da 100644 (file)
--- 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)
index a5a6ea83c8e1049ccd3d4bca5649467fe2c7e916..ef85a499e9fb7b98e7613fb69c5147f4fd0a67fe 100644 (file)
@@ -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);
index 8b38209a82e12dff0f89e62484dd8a2b84e4d83a..838db8c29a42df4e6355a3cd62d404fd4e5efeec 100644 (file)
--- 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)
index 25a92969c76353e1457787714697a30f9ae58d1a..04f90293d132ce6581ae4258f820a9256930479a 100644 (file)
--- 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);