diff options
| author | 2013-08-27 17:40:50 (JST) | |
|---|---|---|
| committer | 2013-09-15 02:30:00 (JST) | |
| commit | 2da46fe5aa7f18839238c37d9bcb63657f89be26 (patch) | |
| tree | 7d647f74939a62b3606bc2a3879c41b9d256d9c0 | |
| parent | d93cebaa18bc69933489bd76c5ce7c40a9a632a6 (diff) | |
| download | cgit-2da46fe5aa7f18839238c37d9bcb63657f89be26.zip cgit-2da46fe5aa7f18839238c37d9bcb63657f89be26.tar.gz | |
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, | |||
| 361 | const char *prefix, int show_ctrls, int raw) | 361 | const char *prefix, int show_ctrls, int raw) |
| 362 | { | 362 | { |
| 363 | struct commit *commit, *commit2; | 363 | struct commit *commit, *commit2; |
| 364 | const unsigned char *old_tree_sha1, *new_tree_sha1; | ||
| 364 | 365 | ||
| 365 | if (!new_rev) | 366 | if (!new_rev) |
| 366 | new_rev = ctx.qry.head; | 367 | new_rev = ctx.qry.head; |
| @@ -373,6 +374,7 @@ void cgit_print_diff(const char *new_rev, const char *old_rev, | |||
| 373 | cgit_print_error("Bad commit: %s", sha1_to_hex(new_rev_sha1)); | 374 | cgit_print_error("Bad commit: %s", sha1_to_hex(new_rev_sha1)); |
| 374 | return; | 375 | return; |
| 375 | } | 376 | } |
| 377 | new_tree_sha1 = commit->tree->object.sha1; | ||
| 376 | 378 | ||
| 377 | if (old_rev) { | 379 | if (old_rev) { |
| 378 | if (get_sha1(old_rev, old_rev_sha1)) { | 380 | if (get_sha1(old_rev, old_rev_sha1)) { |
| @@ -391,13 +393,30 @@ void cgit_print_diff(const char *new_rev, const char *old_rev, | |||
| 391 | cgit_print_error("Bad commit: %s", sha1_to_hex(old_rev_sha1)); | 393 | cgit_print_error("Bad commit: %s", sha1_to_hex(old_rev_sha1)); |
| 392 | return; | 394 | return; |
| 393 | } | 395 | } |
| 396 | old_tree_sha1 = commit2->tree->object.sha1; | ||
| 397 | } else { | ||
| 398 | old_tree_sha1 = NULL; | ||
| 394 | } | 399 | } |
| 395 | 400 | ||
| 396 | if (raw) { | 401 | if (raw) { |
| 402 | struct diff_options diffopt; | ||
| 403 | |||
| 404 | diff_setup(&diffopt); | ||
| 405 | diffopt.output_format = DIFF_FORMAT_PATCH; | ||
| 406 | DIFF_OPT_SET(&diffopt, RECURSIVE); | ||
| 407 | diff_setup_done(&diffopt); | ||
| 408 | |||
| 397 | ctx.page.mimetype = "text/plain"; | 409 | ctx.page.mimetype = "text/plain"; |
| 398 | cgit_print_http_headers(&ctx); | 410 | cgit_print_http_headers(&ctx); |
| 399 | cgit_diff_tree(old_rev_sha1, new_rev_sha1, filepair_cb_raw, | 411 | if (old_tree_sha1) { |
| 400 | prefix, 0); | 412 | diff_tree_sha1(old_tree_sha1, new_tree_sha1, "", |
| 413 | &diffopt); | ||
| 414 | } else { | ||
| 415 | diff_root_tree_sha1(new_tree_sha1, "", &diffopt); | ||
| 416 | } | ||
| 417 | diffcore_std(&diffopt); | ||
| 418 | diff_flush(&diffopt); | ||
| 419 | |||
| 401 | return; | 420 | return; |
| 402 | } | 421 | } |
| 403 | 422 | ||
