Re: [PATCH v2 59/94] builtin/apply: move init_apply_state() to apply.c

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, May 11, 2016 at 9:17 AM, Christian Couder
<christian.couder@xxxxxxxxx> 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.

> Helped-by: Eric Sunshine <sunshine@xxxxxxxxxxxxxx>
> Signed-off-by: Christian Couder <chriscool@xxxxxxxxxxxxx>
> ---
> 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
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]