neocgit

a more 'modern' version of cgit
Log | Files | Refs | Submodules | README | LICENSE | git clone https://git.ne02ptzero.me/git/neocgit

commit f527a57c8a55f5fd315e1bc1cb338f5f4a9b20ae
parent 98fcf7227c8dda520c864ea8a51012934115258f
Author: Lars Hjemli <hjemli@gmail.com>
Date:   Mon,  1 Oct 2007 11:42:19 +0200

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>

Diffstat:
Mcgit.h | 2+-
Mshared.c | 11+++++++++--
Mui-diff.c | 3+--
3 files changed, 11 insertions(+), 5 deletions(-)

diff --git 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 @@ -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 @@ -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("<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>"); }