From f527a57c8a55f5fd315e1bc1cb338f5f4a9b20ae Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Mon, 1 Oct 2007 11:42:19 +0200 Subject: 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 --- cgit.h | 2 +- shared.c | 11 +++++++++-- ui-diff.c | 3 +-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/cgit.h b/cgit.h index e3d9cb8..5ef0bc5 100644 --- a/cgit.h +++ b/cgit.h @@ -170,7 +170,7 @@ extern int cgit_diff_files(const unsigned char *old_sha1, 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 0a6a5ed..3d4feea 100644 --- a/shared.c +++ b/shared.c @@ -386,10 +386,11 @@ int cgit_diff_files(const unsigned char *old_sha1, 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 @@ void cgit_diff_tree(const unsigned char *old_sha1, 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 @@ void cgit_diff_commit(struct commit *commit, filepair_fn fn) 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 0be845f..11a2ff8 100644 --- a/ui-diff.c +++ b/ui-diff.c @@ -131,10 +131,9 @@ void cgit_print_diff(const char *new_rev, const char *old_rev) if (!commit2 || parse_commit(commit2)) cgit_print_error(fmt("Bad commit: %s", sha1_to_hex(sha2))); } - html(""); html(""); html("
"); - cgit_diff_tree(sha2, sha1, filepair_cb); + cgit_diff_tree(sha2, sha1, filepair_cb, NULL); html("
"); } -- cgit v1.2.3-57-g22cb