Author: Lars Hjemli <hjemli@gmail.com>
Add prefix parameter to cgit_diff_tree() This paramter can be used to restrict a diff to the specified path prefix. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
cgit.h | 2 +- shared.c | 11 +++++++++-- ui-diff.c | 3 +--
diff --git a/cgit.h b/cgit.h index e3d9cb875171de19c098e79f8b19231e37aba5b2..5ef0bc5336f3099ba003b85b5b5eeb84806f9f21 100644 --- a/cgit.h +++ b/cgit.h @@ -170,7 +170,7 @@ linediff_fn fn); extern void cgit_diff_tree(const unsigned char *old_sha1, const unsigned char *new_sha1, - filepair_fn fn); + filepair_fn fn, const char *prefix); extern void cgit_diff_commit(struct commit *commit, filepair_fn fn); diff --git a/shared.c b/shared.c index 0a6a5eda80884e5912a2b1fb463f50617ad006d0..3d4feeac2e415db10405f7f81eac3658f1d17b5b 100644 --- a/shared.c +++ b/shared.c @@ -386,10 +386,11 @@ } void cgit_diff_tree(const unsigned char *old_sha1, const unsigned char *new_sha1, - filepair_fn fn) + filepair_fn fn, const char *prefix) { struct diff_options opt; int ret; + int prefixlen; diff_setup(&opt); opt.output_format = DIFF_FORMAT_CALLBACK; @@ -398,6 +399,12 @@ opt.rename_limit = cgit_renamelimit; opt.recursive = 1; opt.format_callback = cgit_diff_tree_cb; opt.format_callback_data = fn; + if (prefix) { + opt.nr_paths = 1; + opt.paths = &prefix; + prefixlen = strlen(prefix); + opt.pathlens = &prefixlen; + } diff_setup_done(&opt); if (old_sha1 && !is_null_sha1(old_sha1)) @@ -414,5 +421,5 @@ unsigned char *old_sha1 = NULL; if (commit->parents) old_sha1 = commit->parents->item->object.sha1; - cgit_diff_tree(old_sha1, commit->object.sha1, fn); + cgit_diff_tree(old_sha1, commit->object.sha1, fn, NULL); } diff --git a/ui-diff.c b/ui-diff.c index 0be845fa41241656e936c2cab4704663c61fa66f..11a2ff8b96744d62cb477de1a72d4a38f9a559cd 100644 --- a/ui-diff.c +++ b/ui-diff.c @@ -131,10 +131,9 @@ commit2 = lookup_commit_reference(sha2); if (!commit2 || parse_commit(commit2)) cgit_print_error(fmt("Bad commit: %s", sha1_to_hex(sha2))); } - html("<table class='diff'>"); html("<tr><td>"); - cgit_diff_tree(sha2, sha1, filepair_cb); + cgit_diff_tree(sha2, sha1, filepair_cb, NULL); html("</td></tr>"); html("</table>"); }