summaryrefslogtreecommitdiffabout
path: root/shared.c
authorLars Hjemli <hjemli@gmail.com>2007-10-01 09:42:19 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2007-10-01 09:42:19 (UTC)
commitf527a57c8a55f5fd315e1bc1cb338f5f4a9b20ae (patch) (side-by-side diff)
tree086e1afad5762c5b6bb09672b58f2c491ffbbc20 /shared.c
parent98fcf7227c8dda520c864ea8a51012934115258f (diff)
downloadcgit-f527a57c8a55f5fd315e1bc1cb338f5f4a9b20ae.zip
cgit-f527a57c8a55f5fd315e1bc1cb338f5f4a9b20ae.tar.gz
cgit-f527a57c8a55f5fd315e1bc1cb338f5f4a9b20ae.tar.bz2
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 (limited to 'shared.c') (more/less context) (ignore whitespace changes)
-rw-r--r--shared.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/shared.c b/shared.c
index 0a6a5ed..3d4feea 100644
--- a/shared.c
+++ b/shared.c
@@ -383,24 +383,31 @@ int cgit_diff_files(const unsigned char *old_sha1,
xdl_diff(&file1, &file2, &diff_params, &emit_params, &emit_cb);
return 0;
}
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;
opt.detect_rename = 1;
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))
ret = diff_tree_sha1(old_sha1, new_sha1, "", &opt);
else
ret = diff_root_tree_sha1(new_sha1, "", &opt);
@@ -411,8 +418,8 @@ void cgit_diff_tree(const unsigned char *old_sha1,
void cgit_diff_commit(struct commit *commit, filepair_fn fn)
{
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);
}