summaryrefslogtreecommitdiff
path: root/src/diff_tform.c
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@microsoft.com>2015-06-23 10:29:59 -0400
committerEdward Thomson <ethomson@microsoft.com>2015-06-23 16:48:50 -0400
commit5ef43d41b036d4178c6d886c2222db9dd7f32fc1 (patch)
treecc96bb84e018d0cc61dd3f5df5d33677d66b9cbf /src/diff_tform.c
parent83ba5e3654631eb186c8b820def459b0680509df (diff)
downloadlibgit2-5ef43d41b036d4178c6d886c2222db9dd7f32fc1.tar.gz
git_diff__merge: allow pluggable diff merges
Diffstat (limited to 'src/diff_tform.c')
-rw-r--r--src/diff_tform.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/diff_tform.c b/src/diff_tform.c
index cc809c159..52a7b528b 100644
--- a/src/diff_tform.c
+++ b/src/diff_tform.c
@@ -109,7 +109,8 @@ static git_diff_delta *diff_delta__merge_like_cgit(
return dup;
}
-int git_diff_merge(git_diff *onto, const git_diff *from)
+int git_diff__merge_deltas(
+ git_diff *onto, const git_diff *from, git_diff__merge_cb cb)
{
int error = 0;
git_pool onto_pool;
@@ -154,7 +155,7 @@ int git_diff_merge(git_diff *onto, const git_diff *from)
const git_diff_delta *left = reversed ? f : o;
const git_diff_delta *right = reversed ? o : f;
- delta = diff_delta__merge_like_cgit(left, right, &onto_pool);
+ delta = cb(left, right, &onto_pool);
i++;
j++;
}
@@ -162,7 +163,7 @@ int git_diff_merge(git_diff *onto, const git_diff *from)
/* the ignore rules for the target may not match the source
* or the result of a merged delta could be skippable...
*/
- if (git_diff_delta__should_skip(&onto->opts, delta)) {
+ if (delta && git_diff_delta__should_skip(&onto->opts, delta)) {
git__free(delta);
continue;
}
@@ -193,6 +194,11 @@ int git_diff_merge(git_diff *onto, const git_diff *from)
return error;
}
+int git_diff_merge(git_diff *onto, const git_diff *from)
+{
+ return git_diff__merge_deltas(onto, from, diff_delta__merge_like_cgit);
+}
+
int git_diff_find_similar__hashsig_for_file(
void **out, const git_diff_file *f, const char *path, void *p)
{