Re: [PATCH 3/5] trailer: split process_command_line_args into separate functions
- From
Glen Choo <chooglen@google.com>
- Date
- Aug 7, 2023, 22:51 UTC
- Message-ID
- <kl6l1qgea2k0.fsf@chooglen-macbookpro.roam.corp.google.com>
- In-Reply-To
- <c8bb013662187e9239d4a2499a63ed76daa78d14.1691211879.git.gitgitgadget@gmail.com>
"Linus Arver via GitGitGadget" <gitgitgadget@gmail.com> writes:
> Previously, process_command_line_args did two things: > > (1) parse trailers from the configuration, and > (2) parse trailers defined on the command line.
It parses trailers from two places, but it still only does "one thing", in that it only parses trailers.
Show 48 quoted lines
> @@ -711,30 +711,35 @@ static void add_arg_item(struct list_head *arg_head, char *tok, char *val,
> list_add_tail(&new_item->list, arg_head);
> }
>
> -static void process_command_line_args(struct list_head *arg_head,
> - struct list_head *new_trailer_head)
> +static void parse_trailers_from_config(struct list_head *config_head)
> {
> struct arg_item *item;
> - struct strbuf tok = STRBUF_INIT;
> - struct strbuf val = STRBUF_INIT;
> - const struct conf_info *conf;
> struct list_head *pos;
>
> - /*
> - * In command-line arguments, '=' is accepted (in addition to the
> - * separators that are defined).
> - */
> - char *cl_separators = xstrfmt("=%s", separators);
> -
> /* Add an arg item for each configured trailer with a command */
> list_for_each(pos, &conf_head) {
> item = list_entry(pos, struct arg_item, list);
> if (item->conf.command)
> - add_arg_item(arg_head,
> + add_arg_item(config_head,
> xstrdup(token_from_item(item, NULL)),
> xstrdup(""),
> &item->conf, NULL);
> }
> +}
> +
> +static void parse_trailers_from_command_line_args(struct list_head *arg_head,
> + struct list_head *new_trailer_head)
> +{
> + struct strbuf tok = STRBUF_INIT;
> + struct strbuf val = STRBUF_INIT;
> + const struct conf_info *conf;
> + struct list_head *pos;
> +
> + /*
> + * In command-line arguments, '=' is accepted (in addition to the
> + * separators that are defined).
> + */
> + char *cl_separators = xstrfmt("=%s", separators);
>
> /* Add an arg item for each trailer on the command line */
> list_for_each(pos, new_trailer_head) {I find this equally readable as the preimage, which IMO is adequately scoped and commented.
Show 12 quoted lines
> @@ -1070,8 +1075,11 @@ void process_trailers(const char *file,
>
>
> if (!opts->only_input) {
> + LIST_HEAD(config_head);
> LIST_HEAD(arg_head);
> - process_command_line_args(&arg_head, new_trailer_head);
> + parse_trailers_from_config(&config_head);
> + parse_trailers_from_command_line_args(&arg_head, new_trailer_head);
> + list_splice(&config_head, &arg_head);
> process_trailers_lists(&head, &arg_head);
> }But now, we have to remember to call two functions instead of just one. This, and the slight additional churn makes me lean negative on this change. I would be really happy if we had a use case where we only wanted to call one function but not the other, but it seems like this isn't the case.