Re: [PATCH v4 28/44] builtin-am: pass git-apply's options to git-apply

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

 



On Sun, Jun 28, 2015 at 7:05 AM, Paul Tan <pyokagan@xxxxxxxxx> wrote:
> git-am.sh recognizes some of git-apply's options, and would pass them to
> git-apply:
>
> * --whitespace, since 8c31cb8 (git-am: --whitespace=x option.,
>   2006-02-28)
>
> * -C, since 67dad68 (add -C[NUM] to git-am, 2007-02-08)
>
> * -p, since 2092a1f (Teach git-am to pass -p option down to git-apply,
>   2007-02-11)
>
> * --directory, since b47dfe9 (git-am: add --directory=<dir> option,
>   2009-01-11)
>
> * --reject, since b80da42 (git-am: implement --reject option passed to
>   git-apply, 2009-01-23)
>
> * --ignore-space-change, --ignore-whitespace, since 86c91f9 (git apply:
>   option to ignore whitespace differences, 2009-08-04)
>
> * --exclude, since 77e9e49 (am: pass exclude down to apply, 2011-08-03)
>
> * --include, since 58725ef (am: support --include option, 2012-03-28)
>
> * --reject, since b80da42 (git-am: implement --reject option passed to
>   git-apply, 2009-01-23)
>
> Re-implement support for these options in builtin/am.c.
>
> Signed-off-by: Paul Tan <pyokagan@xxxxxxxxx>
> ---
>  builtin/am.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 47 insertions(+)
>
> diff --git a/builtin/am.c b/builtin/am.c
> index 55989e5..5aab627 100644
> --- a/builtin/am.c
> +++ b/builtin/am.c
> @@ -115,6 +115,8 @@ struct am_state {
>         /* one of the enum scissors_type values */
>         int scissors;
>
> +       struct argv_array git_apply_opts;
> +
>         /* override error message when patch failure occurs */
>         const char *resolvemsg;
>
> @@ -147,6 +149,8 @@ static void am_state_init(struct am_state *state, const char *dir)
>         git_config_get_bool("am.messageid", &state->message_id);
>
>         state->scissors = SCISSORS_UNSET;
> +
> +       argv_array_init(&state->git_apply_opts);
>  }
>
>  /**
> @@ -168,6 +172,8 @@ static void am_state_release(struct am_state *state)
>
>         if (state->msg)
>                 free(state->msg);
> +
> +       argv_array_clear(&state->git_apply_opts);
>  }
>
>  /**
> @@ -447,6 +453,11 @@ static void am_load(struct am_state *state)
>         else
>                 state->scissors = SCISSORS_UNSET;
>
> +       read_state_file(&sb, state, "apply-opt", 1);
> +       argv_array_clear(&state->git_apply_opts);
> +       if (sq_dequote_to_argv_array(sb.buf, &state->git_apply_opts) < 0)
> +               die(_("could not parse %s"), am_path(state, "apply-opt"));
> +
>         state->rebasing = !!file_exists(am_path(state, "rebasing"));
>
>         strbuf_release(&sb);
> @@ -621,6 +632,7 @@ static void am_setup(struct am_state *state, enum patch_format patch_format,
>  {
>         unsigned char curr_head[GIT_SHA1_RAWSZ];
>         const char *str;
> +       struct strbuf sb = STRBUF_INIT;
>
>         if (!patch_format)
>                 patch_format = detect_patch_format(paths);
> @@ -683,6 +695,9 @@ static void am_setup(struct am_state *state, enum patch_format patch_format,
>
>         write_file(am_path(state, "scissors"), 1, "%s", str);
>
> +       sq_quote_argv(&sb, state->git_apply_opts.argv, 0);
> +       write_file(am_path(state, "apply-opt"), 1, "%s", sb.buf);
> +
>         if (state->rebasing)
>                 write_file(am_path(state, "rebasing"), 1, "%s", "");
>         else
> @@ -707,6 +722,8 @@ static void am_setup(struct am_state *state, enum patch_format patch_format,
>         write_file(am_path(state, "next"), 1, "%d", state->cur);
>
>         write_file(am_path(state, "last"), 1, "%d", state->last);
> +
> +       strbuf_release(&sb);
>  }
>
>  /**
> @@ -1099,6 +1116,8 @@ static int run_apply(const struct am_state *state, const char *index_file)
>
>         argv_array_push(&cp.args, "apply");
>
> +       argv_array_pushv(&cp.args, state->git_apply_opts.argv);
> +
>         if (index_file)
>                 argv_array_push(&cp.args, "--cached");
>         else
> @@ -1125,6 +1144,7 @@ static int build_fake_ancestor(const struct am_state *state, const char *index_f
>
>         cp.git_cmd = 1;
>         argv_array_push(&cp.args, "apply");
> +       argv_array_pushv(&cp.args, state->git_apply_opts.argv);
>         argv_array_pushf(&cp.args, "--build-fake-ancestor=%s", index_file);
>         argv_array_push(&cp.args, am_path(state, "patch"));
>
> @@ -1616,9 +1636,36 @@ int cmd_am(int argc, const char **argv, const char *prefix)
>                   PARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL, 0},
>                 OPT_BOOL('c', "scissors", &state.scissors,
>                         N_("strip everything before a scissors line")),
> +               OPT_PASSTHRU_ARGV(0, "whitespace", &state.git_apply_opts, N_("action"),
> +                       N_("pass it through git-apply"),
> +                       0),
> +               OPT_PASSTHRU_ARGV(0, "ignore-space-change", &state.git_apply_opts, NULL,
> +                       N_("pass it through git-apply"),
> +                       PARSE_OPT_NOARG),
> +               OPT_PASSTHRU_ARGV(0, "ignore-whitespace", &state.git_apply_opts, NULL,
> +                       N_("pass it through git-apply"),
> +                       PARSE_OPT_NOARG),
> +               OPT_PASSTHRU_ARGV(0, "directory", &state.git_apply_opts, N_("root"),
> +                       N_("pass it through git-apply"),
> +                       0),
> +               OPT_PASSTHRU_ARGV(0, "exclude", &state.git_apply_opts, N_("path"),
> +                       N_("pass it through git-apply"),
> +                       0),
> +               OPT_PASSTHRU_ARGV(0, "include", &state.git_apply_opts, N_("path"),
> +                       N_("pass it through git-apply"),
> +                       0),
> +               OPT_PASSTHRU_ARGV('C', NULL, &state.git_apply_opts, N_("n"),
> +                       N_("pass it through git-apply"),
> +                       0),
> +               OPT_PASSTHRU_ARGV('p', NULL, &state.git_apply_opts, N_("num"),
> +                       N_("pass it through git-apply"),
> +                       0),

I realize this was in am.sh as well, but I find the help strings a bit
unfortunate.
(Yes, you actually need to look them up at another place as most people are
not familiar with the apply options).

>                 OPT_CALLBACK(0, "patch-format", &patch_format, N_("format"),
>                         N_("format the patch(es) are in"),
>                         parse_opt_patchformat),
> +               OPT_PASSTHRU_ARGV(0, "reject", &state.git_apply_opts, NULL,
> +                       N_("pass it through git-apply"),
> +                       PARSE_OPT_NOARG),
>                 OPT_STRING(0, "resolvemsg", &state.resolvemsg, NULL,
>                         N_("override error message when patch failure occurs")),
>                 OPT_CMDMODE(0, "continue", &resume,
> --
> 2.5.0.rc0.76.gb2c6e93
>
--
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]