all repos — cgit @ f527a57c8a55f5fd315e1bc1cb338f5f4a9b20ae

a hyperfast web frontend for git written in c

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>
Lars Hjemli hjemli@gmail.com
Mon, 01 Oct 2007 11:42:19 +0200
commit

f527a57c8a55f5fd315e1bc1cb338f5f4a9b20ae

parent

98fcf7227c8dda520c864ea8a51012934115258f

3 files changed, 11 insertions(+), 5 deletions(-)

jump to
M cgit.hcgit.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);
M shared.cshared.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); }
M ui-diff.cui-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>"); }