mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-03 20:02:04 +00:00
diff_parse: correctly set options for parsed diffs
The function `diff_parsed_alloc` allocates and initializes a `git_diff_parsed` structure. This structure also contains diff options. While we initialize its flags, we fail to do a real initialization of its values. This bites us when we want to actually use the generated diff as we do not se the option's version field, which is required to operate correctly. Fix the issue by executing `git_diff_init_options` on the embedded struct.
This commit is contained in:
parent
ad5a909cfb
commit
c0eba379d1
@ -37,7 +37,6 @@ static git_diff_parsed *diff_parsed_alloc(void)
|
||||
|
||||
GIT_REFCOUNT_INC(diff);
|
||||
diff->base.type = GIT_DIFF_TYPE_PARSED;
|
||||
diff->base.opts.flags &= ~GIT_DIFF_IGNORE_CASE;
|
||||
diff->base.strcomp = git__strcmp;
|
||||
diff->base.strncomp = git__strncmp;
|
||||
diff->base.pfxcomp = git__prefixcmp;
|
||||
@ -45,6 +44,9 @@ static git_diff_parsed *diff_parsed_alloc(void)
|
||||
diff->base.patch_fn = git_patch_parsed_from_diff;
|
||||
diff->base.free_fn = diff_parsed_free;
|
||||
|
||||
git_diff_init_options(&diff->base.opts, GIT_DIFF_OPTIONS_VERSION);
|
||||
diff->base.opts.flags &= ~GIT_DIFF_IGNORE_CASE;
|
||||
|
||||
git_pool_init(&diff->base.pool, 1);
|
||||
|
||||
if (git_vector_init(&diff->patches, 0, NULL) < 0 ||
|
||||
|
@ -246,3 +246,24 @@ void test_diff_parse__parsing_minimal_patch_succeeds(void)
|
||||
git_diff_free(diff);
|
||||
git_buf_free(&buf);
|
||||
}
|
||||
|
||||
void test_diff_parse__patch_roundtrip_succeeds(void)
|
||||
{
|
||||
const char buf1[] = "a\n", buf2[] = "b\n";
|
||||
git_buf patchbuf = GIT_BUF_INIT, diffbuf = GIT_BUF_INIT;
|
||||
git_patch *patch;
|
||||
git_diff *diff;
|
||||
|
||||
cl_git_pass(git_patch_from_buffers(&patch, buf1, strlen(buf1), "obj1", buf2, strlen(buf2), "obj2", NULL));
|
||||
cl_git_pass(git_patch_to_buf(&patchbuf, patch));
|
||||
|
||||
cl_git_pass(git_diff_from_buffer(&diff, patchbuf.ptr, patchbuf.size));
|
||||
cl_git_pass(git_diff_to_buf(&diffbuf, diff, GIT_DIFF_FORMAT_PATCH));
|
||||
|
||||
cl_assert_equal_s(patchbuf.ptr, diffbuf.ptr);
|
||||
|
||||
git_patch_free(patch);
|
||||
git_diff_free(diff);
|
||||
git_buf_free(&patchbuf);
|
||||
git_buf_free(&diffbuf);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user