mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-08 02:36:11 +00:00
git_diff__merge: allow pluggable diff merges
This commit is contained in:
parent
83ba5e3654
commit
5ef43d41b0
10
src/diff.h
10
src/diff.h
@ -123,6 +123,16 @@ extern int git_diff_find_similar__calc_similarity(
|
||||
extern int git_diff__commit(
|
||||
git_diff **diff, git_repository *repo, const git_commit *commit, const git_diff_options *opts);
|
||||
|
||||
/* Merge two `git_diff`s according to the callback given by `cb`. */
|
||||
|
||||
typedef git_diff_delta *(*git_diff__merge_cb)(
|
||||
const git_diff_delta *left,
|
||||
const git_diff_delta *right,
|
||||
git_pool *pool);
|
||||
|
||||
extern int git_diff__merge(
|
||||
git_diff *onto, const git_diff *from, git_diff__merge_cb cb);
|
||||
|
||||
/*
|
||||
* Sometimes a git_diff_file will have a zero size; this attempts to
|
||||
* fill in the size without loading the blob if possible. If that is
|
||||
|
@ -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)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user