Re: Silly 'git am' UI issue

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

 



On Thu, Mar 3, 2022 at 1:58 PM Junio C Hamano <gitster@xxxxxxxxx> wrote:
>
> I wonder if something like this would have helped.

That would certainly have helped, yes.

But I think we can do better.

How about just parsing the "--whitespace" option in 'git am' before
passing it through?

Something like the attached patch seems to work for me.

With this one, I simply get

    $ git am --whitespace 0001-Dummy.patch
    error: unrecognized whitespace option '0001-Dummy.patch'

when I make the mistake of not giving that whitespace argument.

I'm not claiming this is extensively tested, but I did *some* testing
on it, and it's not a complicated patch.

             Linus
 apply.c      |  2 +-
 apply.h      |  2 ++
 builtin/am.c | 14 ++++++++++++--
 3 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/apply.c b/apply.c
index 0912307bd9..28e6fe0cfa 100644
--- a/apply.c
+++ b/apply.c
@@ -36,7 +36,7 @@ static void git_apply_config(void)
 	git_config(git_xmerge_config, NULL);
 }
 
-static int parse_whitespace_option(struct apply_state *state, const char *option)
+int parse_whitespace_option(struct apply_state *state, const char *option)
 {
 	if (!option) {
 		state->ws_error_action = warn_on_ws_error;
diff --git a/apply.h b/apply.h
index 4052da50c0..c931786a2a 100644
--- a/apply.h
+++ b/apply.h
@@ -173,6 +173,8 @@ int parse_git_diff_header(struct strbuf *root,
 			  unsigned int size,
 			  struct patch *patch);
 
+int parse_whitespace_option(struct apply_state *state, const char *option);
+
 /*
  * Some aspects of the apply behavior are controlled by the following
  * bits in the "options" parameter passed to apply_all_patches().
diff --git a/builtin/am.c b/builtin/am.c
index 0f4111bafa..542c6c5cab 100644
--- a/builtin/am.c
+++ b/builtin/am.c
@@ -2298,6 +2298,16 @@ static int parse_opt_show_current_patch(const struct option *opt, const char *ar
 	return 0;
 }
 
+static int parse_opt_whitespace(const struct option *opt, const char *arg, int unset)
+{
+	struct apply_state dummy = { };
+
+	if (parse_whitespace_option(&dummy, arg))
+		return -1;
+
+	return parse_opt_passthru_argv(opt, arg, unset);
+}
+
 static int git_am_config(const char *k, const char *v, void *cb)
 {
 	int status;
@@ -2355,9 +2365,9 @@ int cmd_am(int argc, const char **argv, const char *prefix)
 		OPT_CALLBACK_F(0, "quoted-cr", &state.quoted_cr, N_("action"),
 			       N_("pass it through git-mailinfo"),
 			       PARSE_OPT_NONEG, am_option_parse_quoted_cr),
-		OPT_PASSTHRU_ARGV(0, "whitespace", &state.git_apply_opts, N_("action"),
+		OPT_CALLBACK(0, "whitespace", &state.git_apply_opts, N_("action"),
 			N_("pass it through git-apply"),
-			0),
+			parse_opt_whitespace),
 		OPT_PASSTHRU_ARGV(0, "ignore-space-change", &state.git_apply_opts, NULL,
 			N_("pass it through git-apply"),
 			PARSE_OPT_NOARG),

[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]

  Powered by Linux