diff options
| author | Lukas Fleischer <cgit@cryptocrack.de> | 2013-08-27 10:40:50 +0200 | 
|---|---|---|
| committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2013-09-14 19:30:00 +0200 | 
| commit | 2da46fe5aa7f18839238c37d9bcb63657f89be26 (patch) | |
| tree | 7d647f74939a62b3606bc2a3879c41b9d256d9c0 | |
| parent | tests/: Add t0110-rawdiff.sh (diff) | |
| download | cgit-2da46fe5aa7f18839238c37d9bcb63657f89be26.tar.gz cgit-2da46fe5aa7f18839238c37d9bcb63657f89be26.tar.bz2 cgit-2da46fe5aa7f18839238c37d9bcb63657f89be26.zip | |
ui-diff: Use diff_tree_sha1() for raw diff formatting
Use Git's internal diff_tree_sha1() function for the /rawdiff/ command
instead of trying to recreate this functionality.
Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
| -rw-r--r-- | ui-diff.c | 23 | 
1 files changed, 21 insertions, 2 deletions
| @@ -361,6 +361,7 @@ void cgit_print_diff(const char *new_rev, const char *old_rev,  		     const char *prefix, int show_ctrls, int raw)  {  	struct commit *commit, *commit2; +	const unsigned char *old_tree_sha1, *new_tree_sha1;  	if (!new_rev)  		new_rev = ctx.qry.head; @@ -373,6 +374,7 @@ void cgit_print_diff(const char *new_rev, const char *old_rev,  		cgit_print_error("Bad commit: %s", sha1_to_hex(new_rev_sha1));  		return;  	} +	new_tree_sha1 = commit->tree->object.sha1;  	if (old_rev) {  		if (get_sha1(old_rev, old_rev_sha1)) { @@ -391,13 +393,30 @@ void cgit_print_diff(const char *new_rev, const char *old_rev,  			cgit_print_error("Bad commit: %s", sha1_to_hex(old_rev_sha1));  			return;  		} +		old_tree_sha1 = commit2->tree->object.sha1; +	} else { +		old_tree_sha1 = NULL;  	}  	if (raw) { +		struct diff_options diffopt; + +		diff_setup(&diffopt); +		diffopt.output_format = DIFF_FORMAT_PATCH; +		DIFF_OPT_SET(&diffopt, RECURSIVE); +		diff_setup_done(&diffopt); +  		ctx.page.mimetype = "text/plain";  		cgit_print_http_headers(&ctx); -		cgit_diff_tree(old_rev_sha1, new_rev_sha1, filepair_cb_raw, -			       prefix, 0); +		if (old_tree_sha1) { +			diff_tree_sha1(old_tree_sha1, new_tree_sha1, "", +				       &diffopt); +		} else { +			diff_root_tree_sha1(new_tree_sha1, "", &diffopt); +		} +		diffcore_std(&diffopt); +		diff_flush(&diffopt); +  		return;  	} | 
