"Johannes Schindelin via GitGitGadget" <gitgitgad...@gmail.com>
writes:

> However, there is a much better way (that I was unaware of, at the time
> when I mentored Pratik to implement these options): OPT_PASSTHRU_ARGV.
> It is intended for exactly this use case, where command-line options
> want to be parsed into a separate `argv_array`.
>
> Let's use this feature.
>
> Incidentally, this also allows us to address a bug discovered by Phillip
> Wood, where the built-in rebase failed to understand that the `-C`
> option takes an optional argument.

The resulting code does show what is going on more clearly.  I
wonder if we can do the same for -S as well?  It needs to be passed
to other backends, so I guess it is not such a good idea.

> -             .git_am_opt = STRBUF_INIT,
> +             .git_am_opts = ARGV_ARRAY_INIT,

Yes, this is much nicer.

> @@ -856,10 +858,6 @@ int cmd_rebase(int argc, const char **argv, const char 
> *prefix)
>               { OPTION_STRING, 'S', "gpg-sign", &gpg_sign, N_("key-id"),
>                       N_("GPG-sign commits"),
>                       PARSE_OPT_OPTARG, NULL, (intptr_t) "" },
> -             OPT_STRING_LIST(0, "whitespace", &whitespace,
> -                             N_("whitespace"), N_("passed to 'git apply'")),
> -             OPT_SET_INT('C', NULL, &opt_c, N_("passed to 'git apply'"),
> -                         REBASE_AM),
>               OPT_BOOL(0, "autostash", &options.autostash,
>                        N_("automatically stash/stash pop before and after")),
>               OPT_STRING_LIST('x', "exec", &exec, N_("exec"),
> @@ -884,6 +882,7 @@ int cmd_rebase(int argc, const char **argv, const char 
> *prefix)
>                        N_("rebase all reachable commits up to the root(s)")),
>               OPT_END(),
>       };
> +     int i;
>  
> +     for (i = 0; i < options.git_am_opts.argc; i++) {

Yes, this is very nice way to first collect and then inspect them
separately.

> +             const char *option = options.git_am_opts.argv[i];
> +             if (!strcmp(option, "--committer-date-is-author-date") ||
> +                 !strcmp(option, "--ignore-date") ||
> +                 !strcmp(option, "--whitespace=fix") ||
> +                 !strcmp(option, "--whitespace=strip"))
> +                     options.flags |= REBASE_FORCE;
>       }

Overall very nicely done.  Perhaps we'll see a test or two from
Philip?

Thanks.

Reply via email to