mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-30 16:43:16 +00:00
patch parse: dup the patch from the callers
This commit is contained in:
parent
6278fbc5dd
commit
4117a2350f
@ -196,12 +196,6 @@ int git_patch_get_line_in_hunk(
|
|||||||
|
|
||||||
static void git_patch__free(git_patch *patch)
|
static void git_patch__free(git_patch *patch)
|
||||||
{
|
{
|
||||||
git_array_clear(patch->lines);
|
|
||||||
git_array_clear(patch->hunks);
|
|
||||||
|
|
||||||
git__free((char *)patch->binary.old_file.data);
|
|
||||||
git__free((char *)patch->binary.new_file.data);
|
|
||||||
|
|
||||||
if (patch->free_fn)
|
if (patch->free_fn)
|
||||||
patch->free_fn(patch);
|
patch->free_fn(patch);
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,12 @@ static void patch_diff_free(git_patch *p)
|
|||||||
{
|
{
|
||||||
git_patch_diff *patch = (git_patch_diff *)p;
|
git_patch_diff *patch = (git_patch_diff *)p;
|
||||||
|
|
||||||
|
git_array_clear(patch->base.lines);
|
||||||
|
git_array_clear(patch->base.hunks);
|
||||||
|
|
||||||
|
git__free((char *)patch->base.binary.old_file.data);
|
||||||
|
git__free((char *)patch->base.binary.new_file.data);
|
||||||
|
|
||||||
git_diff_file_content__clear(&patch->ofile);
|
git_diff_file_content__clear(&patch->ofile);
|
||||||
git_diff_file_content__clear(&patch->nfile);
|
git_diff_file_content__clear(&patch->nfile);
|
||||||
|
|
||||||
|
@ -10,6 +10,10 @@ typedef struct {
|
|||||||
|
|
||||||
git_patch_options opts;
|
git_patch_options opts;
|
||||||
|
|
||||||
|
/* the patch contents, which lines will point into. */
|
||||||
|
/* TODO: allow us to point somewhere refcounted. */
|
||||||
|
char *content;
|
||||||
|
|
||||||
/* the paths from the `diff --git` header, these will be used if this is not
|
/* the paths from the `diff --git` header, these will be used if this is not
|
||||||
* a rename (and rename paths are specified) or if no `+++`/`---` line specify
|
* a rename (and rename paths are specified) or if no `+++`/`---` line specify
|
||||||
* the paths.
|
* the paths.
|
||||||
@ -931,6 +935,12 @@ static void patch_parsed__free(git_patch *p)
|
|||||||
if (!patch)
|
if (!patch)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
git__free((char *)patch->base.binary.old_file.data);
|
||||||
|
git__free((char *)patch->base.binary.new_file.data);
|
||||||
|
git_array_clear(patch->base.hunks);
|
||||||
|
git_array_clear(patch->base.lines);
|
||||||
|
git__free(patch->base.delta);
|
||||||
|
|
||||||
git__free(patch->old_prefix);
|
git__free(patch->old_prefix);
|
||||||
git__free(patch->new_prefix);
|
git__free(patch->new_prefix);
|
||||||
git__free(patch->header_old_path);
|
git__free(patch->header_old_path);
|
||||||
@ -939,9 +949,7 @@ static void patch_parsed__free(git_patch *p)
|
|||||||
git__free(patch->rename_new_path);
|
git__free(patch->rename_new_path);
|
||||||
git__free(patch->old_path);
|
git__free(patch->old_path);
|
||||||
git__free(patch->new_path);
|
git__free(patch->new_path);
|
||||||
git_array_clear(patch->base.hunks);
|
git__free(patch->content);
|
||||||
git_array_clear(patch->base.lines);
|
|
||||||
git__free(patch->base.delta);
|
|
||||||
git__free(patch);
|
git__free(patch);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -969,10 +977,19 @@ int git_patch_from_patchfile(
|
|||||||
patch->base.free_fn = patch_parsed__free;
|
patch->base.free_fn = patch_parsed__free;
|
||||||
|
|
||||||
patch->base.delta = git__calloc(1, sizeof(git_diff_delta));
|
patch->base.delta = git__calloc(1, sizeof(git_diff_delta));
|
||||||
|
GITERR_CHECK_ALLOC(patch->base.delta);
|
||||||
|
|
||||||
patch->base.delta->status = GIT_DELTA_MODIFIED;
|
patch->base.delta->status = GIT_DELTA_MODIFIED;
|
||||||
patch->base.delta->nfiles = 2;
|
patch->base.delta->nfiles = 2;
|
||||||
|
|
||||||
ctx.content = content;
|
if (content_len) {
|
||||||
|
patch->content = git__malloc(content_len);
|
||||||
|
GITERR_CHECK_ALLOC(patch->content);
|
||||||
|
|
||||||
|
memcpy(patch->content, content, content_len);
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.content = patch->content;
|
||||||
ctx.content_len = content_len;
|
ctx.content_len = content_len;
|
||||||
ctx.remain = content_len;
|
ctx.remain = content_len;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user