diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/diff.h | 2 | ||||
-rw-r--r-- | src/diff_generate.c | 2 | ||||
-rw-r--r-- | src/diff_parse.c | 8 | ||||
-rw-r--r-- | src/diff_parse.h | 18 | ||||
-rw-r--r-- | src/patch.c | 6 | ||||
-rw-r--r-- | src/patch_generate.c | 2 | ||||
-rw-r--r-- | src/patch_generate.h | 2 | ||||
-rw-r--r-- | src/patch_parse.c | 15 | ||||
-rw-r--r-- | src/patch_parse.h | 2 |
9 files changed, 50 insertions, 7 deletions
diff --git a/src/diff.h b/src/diff.h index 2c0e52ca2..5750d2a09 100644 --- a/src/diff.h +++ b/src/diff.h @@ -8,6 +8,7 @@ #define INCLUDE_diff_h__ #include "git2/diff.h" +#include "git2/patch.h" #include "git2/sys/diff.h" #include "git2/oid.h" @@ -44,6 +45,7 @@ struct git_diff { int (*pfxcomp)(const char *str, const char *pfx); int (*entrycomp)(const void *a, const void *b); + int (*patch_fn)(git_patch **out, git_diff *diff, size_t idx); void (*free_fn)(git_diff *diff); }; diff --git a/src/diff_generate.c b/src/diff_generate.c index a996bf156..06f9b19c7 100644 --- a/src/diff_generate.c +++ b/src/diff_generate.c @@ -7,6 +7,7 @@ #include "common.h" #include "diff.h" #include "diff_generate.h" +#include "patch_generate.h" #include "fileops.h" #include "config.h" #include "attr_file.h" @@ -414,6 +415,7 @@ static git_diff_generated *diff_generated_alloc( diff->base.repo = repo; diff->base.old_src = old_iter->type; diff->base.new_src = new_iter->type; + diff->base.patch_fn = git_patch_generated_from_diff; diff->base.free_fn = diff_generated_free; memcpy(&diff->base.opts, &dflt, sizeof(git_diff_options)); diff --git a/src/diff_parse.c b/src/diff_parse.c index ffdc8df88..e640063af 100644 --- a/src/diff_parse.c +++ b/src/diff_parse.c @@ -6,15 +6,10 @@ */ #include "common.h" #include "diff.h" +#include "diff_parse.h" #include "patch.h" #include "patch_parse.h" -typedef struct { - struct git_diff base; - - git_vector patches; -} git_diff_parsed; - static void diff_parsed_free(git_diff *d) { git_diff_parsed *diff = (git_diff_parsed *)d; @@ -47,6 +42,7 @@ static git_diff_parsed *diff_parsed_alloc(void) diff->base.strncomp = git__strncmp; diff->base.pfxcomp = git__prefixcmp; diff->base.entrycomp = git_diff__entry_cmp; + diff->base.patch_fn = git_patch_parsed_from_diff; diff->base.free_fn = diff_parsed_free; git_pool_init(&diff->base.pool, 1); diff --git a/src/diff_parse.h b/src/diff_parse.h new file mode 100644 index 000000000..c47d4cbc9 --- /dev/null +++ b/src/diff_parse.h @@ -0,0 +1,18 @@ +/* + * Copyright (C) the libgit2 contributors. All rights reserved. + * + * This file is part of libgit2, distributed under the GNU GPL v2 with + * a Linking Exception. For full terms see the included COPYING file. + */ +#ifndef INCLUDE_diff_parse_h__ +#define INCLUDE_diff_parse_h__ + +#include "diff.h" + +typedef struct { + struct git_diff base; + + git_vector patches; +} git_diff_parsed; + +#endif diff --git a/src/patch.c b/src/patch.c index e14ffa9c0..ad24b0714 100644 --- a/src/patch.c +++ b/src/patch.c @@ -194,6 +194,12 @@ int git_patch_get_line_in_hunk( return 0; } +int git_patch_from_diff(git_patch **out, git_diff *diff, size_t idx) +{ + assert(out && diff && diff->patch_fn); + return diff->patch_fn(out, diff, idx); +} + static void git_patch__free(git_patch *patch) { if (patch->free_fn) diff --git a/src/patch_generate.c b/src/patch_generate.c index feac4f67a..927786a43 100644 --- a/src/patch_generate.c +++ b/src/patch_generate.c @@ -746,7 +746,7 @@ int git_patch_from_buffers( return patch_from_sources(out, &osrc, &nsrc, opts); } -int git_patch_from_diff( +int git_patch_generated_from_diff( git_patch **patch_ptr, git_diff *diff, size_t idx) { int error = 0; diff --git a/src/patch_generate.h b/src/patch_generate.h index bb26a76e5..2e89b5c4d 100644 --- a/src/patch_generate.h +++ b/src/patch_generate.h @@ -42,6 +42,8 @@ extern void git_patch_generated_old_data( char **, size_t *, git_patch_generated *); extern void git_patch_generated_new_data( char **, size_t *, git_patch_generated *); +extern int git_patch_generated_from_diff( + git_patch **, git_diff *, size_t); typedef struct git_patch_generated_output git_patch_generated_output; diff --git a/src/patch_parse.c b/src/patch_parse.c index 82d2d3e2e..44bcf8f75 100644 --- a/src/patch_parse.c +++ b/src/patch_parse.c @@ -7,6 +7,7 @@ #include "git2/patch.h" #include "patch.h" #include "patch_parse.h" +#include "diff_parse.h" #include "path.h" #define parse_err(...) \ @@ -1025,6 +1026,20 @@ void git_patch_parse_ctx_free(git_patch_parse_ctx *ctx) GIT_REFCOUNT_DEC(ctx, patch_parse_ctx_free); } +int git_patch_parsed_from_diff(git_patch **out, git_diff *d, size_t idx) +{ + git_diff_parsed *diff = (git_diff_parsed *)d; + git_patch *p; + + if ((p = git_vector_get(&diff->patches, idx)) == NULL) + return -1; + + GIT_REFCOUNT_INC(p); + *out = p; + + return 0; +} + static void patch_parsed__free(git_patch *p) { git_patch_parsed *patch = (git_patch_parsed *)p; diff --git a/src/patch_parse.h b/src/patch_parse.h index da56dad7c..99eb4587b 100644 --- a/src/patch_parse.h +++ b/src/patch_parse.h @@ -51,4 +51,6 @@ extern int git_patch_parse( git_patch **out, git_patch_parse_ctx *ctx); +extern int git_patch_parsed_from_diff(git_patch **, git_diff *, size_t); + #endif |