diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2021-08-27 17:06:50 -0400 |
---|---|---|
committer | Edward Thomson <ethomson@edwardthomson.com> | 2021-08-29 12:29:23 -0400 |
commit | 5bcef522f382042c68d6a7577ec67732687305f2 (patch) | |
tree | c380733338dbad83d127c3b404a13c50d578b4c4 | |
parent | c089d5ac6145e4498167c9a3157835e416084d18 (diff) | |
download | libgit2-ethomson/filter_apply.tar.gz |
filter: deprecate apply functionethomson/filter_apply
-rw-r--r-- | include/git2/sys/filter.h | 8 | ||||
-rw-r--r-- | src/filter.c | 41 |
2 files changed, 36 insertions, 13 deletions
diff --git a/include/git2/sys/filter.h b/include/git2/sys/filter.h index 098f8f7d3..b3759416a 100644 --- a/include/git2/sys/filter.h +++ b/include/git2/sys/filter.h @@ -178,6 +178,7 @@ typedef int GIT_CALLBACK(git_filter_check_fn)( const git_filter_source *src, const char **attr_values); +#ifndef GIT_DEPRECATE_HARD /** * Callback to actually perform the data filtering * @@ -189,6 +190,8 @@ typedef int GIT_CALLBACK(git_filter_check_fn)( * * The `payload` value will refer to any payload that was set by the * `check` callback. It may be read from or written to as needed. + * + * @deprecated use git_filter_stream_fn */ typedef int GIT_CALLBACK(git_filter_apply_fn)( git_filter *self, @@ -196,6 +199,7 @@ typedef int GIT_CALLBACK(git_filter_apply_fn)( git_buf *to, const git_buf *from, const git_filter_source *src); +#endif /** * Callback to perform the data filtering. @@ -263,12 +267,16 @@ struct git_filter { */ git_filter_check_fn check; +#ifdef GIT_DEPRECATE_HARD + void *reserved; +#else /** * Provided for backward compatibility; this will apply the * filter to the given contents in a `git_buf`. Callers should * provide a `stream` function instead. */ git_filter_apply_fn apply; +#endif /** * Called to apply the filter, this function will provide a diff --git a/src/filter.c b/src/filter.c index 21ae27167..f1d961406 100644 --- a/src/filter.c +++ b/src/filter.c @@ -939,6 +939,32 @@ int git_filter_buffered_stream_new( return 0; } +static int setup_stream( + git_writestream **out, + git_filter_entry *fe, + git_filter_list *filters, + git_writestream *last_stream) +{ +#ifndef GIT_DEPRECATE_HARD + GIT_ASSERT(fe->filter->stream || fe->filter->apply); + + /* + * If necessary, create a stream that proxies the traditional + * application. + */ + if (!fe->filter->stream) { + /* Create a stream that proxies the one-shot apply */ + return git_filter_buffered_stream_new(out, + fe->filter, fe->filter->apply, filters->temp_buf, + &fe->payload, &filters->source, last_stream); + } +#endif + + GIT_ASSERT(fe->filter->stream); + return fe->filter->stream(out, fe->filter, + &fe->payload, &filters->source, last_stream); +} + static int stream_list_init( git_writestream **out, git_vector *streams, @@ -960,22 +986,11 @@ static int stream_list_init( for (i = 0; i < git_array_size(filters->filters); ++i) { size_t filter_idx = (filters->source.mode == GIT_FILTER_TO_WORKTREE) ? git_array_size(filters->filters) - 1 - i : i; + git_filter_entry *fe = git_array_get(filters->filters, filter_idx); git_writestream *filter_stream; - GIT_ASSERT(fe->filter->stream || fe->filter->apply); - - /* If necessary, create a stream that proxies the traditional - * application. - */ - if (fe->filter->stream) - error = fe->filter->stream(&filter_stream, fe->filter, - &fe->payload, &filters->source, last_stream); - else - /* Create a stream that proxies the one-shot apply */ - error = git_filter_buffered_stream_new(&filter_stream, - fe->filter, fe->filter->apply, filters->temp_buf, - &fe->payload, &filters->source, last_stream); + error = setup_stream(&filter_stream, fe, filters, last_stream); if (error < 0) goto out; |