Re: [PATCH v2 59/94] builtin/apply: move init_apply_state() to apply.c
- From
Eric Sunshine <sunshine@sunshineco.com>
- Date
- May 16, 2016, 03:16 UTC
- Message-ID
- <CAPig+cSWPYx9o-fnzXqUN4KR8h+15nBAX8CHhbiCxd5QcyOJLg@mail.gmail.com>
- In-Reply-To
- <20160511131745.2914-60-chriscool@tuxfamily.org>
On Wed, May 11, 2016 at 9:17 AM, Christian Couder <christian.couder@gmail.com> wrote:
> To libify `git apply` functionality we must make init_apply_state() > usable outside "builtin/apply.c". > > Let's do that by moving it into a new "apply.c".
Similar to my comment about apply.h and 'struct apply_state', I can easily see apply.c introduced very early in the conversion. In fact, I'd imagine apply.c and apply.h being introduced by the same patch, with that patch placing init_apply_state() in apply.c and 'struct apply_state' in apply.h. However, I see that you're moving other functions, as well, which already existed in builtin/apply.c, so I guess that's why introduction of apply.c waited until this step.
Show 106 quoted lines
> Helped-by: Eric Sunshine <sunshine@sunshineco.com>
> Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
> ---
> diff --git a/apply.c b/apply.c
> @@ -0,0 +1,83 @@
> +#include "cache.h"
> +#include "lockfile.h"
> +#include "apply.h"
> +
> +static void git_apply_config(void)
> +{
> + git_config_get_string_const("apply.whitespace", &apply_default_whitespace);
> + git_config_get_string_const("apply.ignorewhitespace", &apply_default_ignorewhitespace);
> + git_config(git_default_config, NULL);
> +}
> +
> +int parse_whitespace_option(struct apply_state *state, const char *option)
> +{
> + if (!option) {
> + state->ws_error_action = warn_on_ws_error;
> + return 0;
> + }
> + if (!strcmp(option, "warn")) {
> + state->ws_error_action = warn_on_ws_error;
> + return 0;
> + }
> + if (!strcmp(option, "nowarn")) {
> + state->ws_error_action = nowarn_ws_error;
> + return 0;
> + }
> + if (!strcmp(option, "error")) {
> + state->ws_error_action = die_on_ws_error;
> + return 0;
> + }
> + if (!strcmp(option, "error-all")) {
> + state->ws_error_action = die_on_ws_error;
> + state->squelch_whitespace_errors = 0;
> + return 0;
> + }
> + if (!strcmp(option, "strip") || !strcmp(option, "fix")) {
> + state->ws_error_action = correct_ws_error;
> + return 0;
> + }
> + return error(_("unrecognized whitespace option '%s'"), option);
> +}
> +
> +int parse_ignorewhitespace_option(struct apply_state *state,
> + const char *option)
> +{
> + if (!option || !strcmp(option, "no") ||
> + !strcmp(option, "false") || !strcmp(option, "never") ||
> + !strcmp(option, "none")) {
> + state->ws_ignore_action = ignore_ws_none;
> + return 0;
> + }
> + if (!strcmp(option, "change")) {
> + state->ws_ignore_action = ignore_ws_change;
> + return 0;
> + }
> + return error(_("unrecognized whitespace ignore option '%s'"), option);
> +}
> +
> +void init_apply_state(struct apply_state *state,
> + const char *prefix,
> + struct lock_file *lock_file)
> +{
> + memset(state, 0, sizeof(*state));
> + state->prefix = prefix;
> + state->prefix_length = state->prefix ? strlen(state->prefix) : 0;
> + state->lock_file = lock_file ? lock_file : xcalloc(1, sizeof(*lock_file));
> + state->newfd = -1;
> + state->apply = 1;
> + state->line_termination = '\n';
> + state->p_value = 1;
> + state->p_context = UINT_MAX;
> + state->squelch_whitespace_errors = 5;
> + state->ws_error_action = warn_on_ws_error;
> + state->ws_ignore_action = ignore_ws_none;
> + state->linenr = 1;
> + strbuf_init(&state->root, 0);
> +
> + git_apply_config();
> + if (apply_default_whitespace && parse_whitespace_option(state, apply_default_whitespace))
> + exit(1);
> + if (apply_default_ignorewhitespace && parse_ignorewhitespace_option(state, apply_default_ignorewhitespace))
> + exit(1);
> +}
> +
> diff --git a/apply.h b/apply.h
> index aa11ea6..0f77f4d 100644
> --- a/apply.h
> +++ b/apply.h
> @@ -112,4 +112,13 @@ struct apply_state {
> enum ws_ignore ws_ignore_action;
> };
>
> +extern int parse_whitespace_option(struct apply_state *state,
> + const char *option);
> +extern int parse_ignorewhitespace_option(struct apply_state *state,
> + const char *option);
> +
> +extern void init_apply_state(struct apply_state *state,
> + const char *prefix,
> + struct lock_file *lock_file);
> +
> #endif