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>
This commit is contained in:
Lars Hjemli 2007-10-01 11:42:19 +02:00
parent 98fcf7227c
commit f527a57c8a
3 changed files with 11 additions and 5 deletions

2
cgit.h
View File

@ -170,7 +170,7 @@ extern int cgit_diff_files(const unsigned char *old_sha1,
extern void cgit_diff_tree(const unsigned char *old_sha1, extern void cgit_diff_tree(const unsigned char *old_sha1,
const unsigned char *new_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); extern void cgit_diff_commit(struct commit *commit, filepair_fn fn);

View File

@ -386,10 +386,11 @@ int cgit_diff_files(const unsigned char *old_sha1,
void cgit_diff_tree(const unsigned char *old_sha1, void cgit_diff_tree(const unsigned char *old_sha1,
const unsigned char *new_sha1, const unsigned char *new_sha1,
filepair_fn fn) filepair_fn fn, const char *prefix)
{ {
struct diff_options opt; struct diff_options opt;
int ret; int ret;
int prefixlen;
diff_setup(&opt); diff_setup(&opt);
opt.output_format = DIFF_FORMAT_CALLBACK; opt.output_format = DIFF_FORMAT_CALLBACK;
@ -398,6 +399,12 @@ void cgit_diff_tree(const unsigned char *old_sha1,
opt.recursive = 1; opt.recursive = 1;
opt.format_callback = cgit_diff_tree_cb; opt.format_callback = cgit_diff_tree_cb;
opt.format_callback_data = fn; opt.format_callback_data = fn;
if (prefix) {
opt.nr_paths = 1;
opt.paths = &prefix;
prefixlen = strlen(prefix);
opt.pathlens = &prefixlen;
}
diff_setup_done(&opt); diff_setup_done(&opt);
if (old_sha1 && !is_null_sha1(old_sha1)) 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) if (commit->parents)
old_sha1 = commit->parents->item->object.sha1; 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);
} }

View File

@ -131,10 +131,9 @@ void cgit_print_diff(const char *new_rev, const char *old_rev)
if (!commit2 || parse_commit(commit2)) if (!commit2 || parse_commit(commit2))
cgit_print_error(fmt("Bad commit: %s", sha1_to_hex(sha2))); cgit_print_error(fmt("Bad commit: %s", sha1_to_hex(sha2)));
} }
html("<table class='diff'>"); html("<table class='diff'>");
html("<tr><td>"); html("<tr><td>");
cgit_diff_tree(sha2, sha1, filepair_cb); cgit_diff_tree(sha2, sha1, filepair_cb, NULL);
html("</td></tr>"); html("</td></tr>");
html("</table>"); html("</table>");
} }