git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v4 03/17] trailer: read and process config information

From
Eric Sunshine <sunshine@sunshineco.com>
Date
Jan 31, 2014, 15:43 UTC
Message-ID
<CAPig+cSZhZXXDvrAQfsL5FYrSUro89mLa=DXvFGtCnemeM4oSg@mail.gmail.com>
In-Reply-To
<20140130064921.7504.3711.chriscool@tuxfamily.org>

On Thu, Jan 30, 2014 at 1:49 AM, Christian Couder <chriscool@tuxfamily.org> wrote:

Show 17 quoted lines
> This patch implements reading the configuration
> to get trailer information, and then processing
> it and storing it in a doubly linked list.
>
> The config information is stored in the list
> whose first item is pointed to by:
>
> static struct trailer_item *first_conf_item;
>
> Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
> ---
> diff --git a/trailer.c b/trailer.c
> index e9ccfa5..d979a0f 100644
> --- a/trailer.c
> +++ b/trailer.c
> @@ -235,3 +237,128 @@ static void process_trailers_lists(struct trailer_item **infile_tok_first,
> +static struct trailer_item *get_conf_item(char *name)
Should this be 'const char *'?
Show 66 quoted lines
> +{
> +       struct trailer_item *item;
> +       struct trailer_item *previous;
> +
> +       /* Look up item with same name */
> +       for (previous = NULL, item = first_conf_item;
> +            item;
> +            previous = item, item = item->next) {
> +               if (!strcasecmp(item->conf->name, name))
> +                       return item;
> +       }
> +
> +       /* Item does not already exists, create it */
> +       item = xcalloc(sizeof(struct trailer_item), 1);
> +       item->conf = xcalloc(sizeof(struct conf_info), 1);
> +       item->conf->name = xstrdup(name);
> +
> +       if (!previous)
> +               first_conf_item = item;
> +       else {
> +               previous->next = item;
> +               item->previous = previous;
> +       }
> +
> +       return item;
> +}
> +
> +static int git_trailer_config(const char *conf_key, const char *value, void *cb)
> +{
> +       if (starts_with(conf_key, "trailer.")) {
> +               const char *orig_conf_key = conf_key;
> +               struct trailer_item *item;
> +               struct conf_info *conf;
> +               char *name;
> +               enum trailer_info_type type;
> +
> +               conf_key += 8;
> +               if (!set_name_and_type(conf_key, ".key", TRAILER_VALUE, &name, &type) &&
> +                   !set_name_and_type(conf_key, ".command", TRAILER_COMMAND, &name, &type) &&
> +                   !set_name_and_type(conf_key, ".where", TRAILER_WHERE, &name, &type) &&
> +                   !set_name_and_type(conf_key, ".ifexist", TRAILER_IF_EXIST, &name, &type) &&
> +                   !set_name_and_type(conf_key, ".ifmissing", TRAILER_IF_MISSING, &name, &type))
> +                       return 0;
> +
> +               item = get_conf_item(name);
> +               conf = item->conf;
> +
> +               if (type == TRAILER_VALUE) {
> +                       if (conf->key)
> +                               warning(_("more than one %s"), orig_conf_key);
> +                       conf->key = xstrdup(value);
> +               } else if (type == TRAILER_COMMAND) {
> +                       if (conf->command)
> +                               warning(_("more than one %s"), orig_conf_key);
> +                       conf->command = xstrdup(value);
> +               } else if (type == TRAILER_WHERE) {
> +                       if (set_where(conf, value))
> +                               warning(_("unknown value '%s' for key '%s'"), value, orig_conf_key);
> +               } else if (type == TRAILER_IF_EXIST) {
> +                       if (set_if_exist(conf, value))
> +                               warning(_("unknown value '%s' for key '%s'"), value, orig_conf_key);
> +               } else if (type == TRAILER_IF_MISSING) {
> +                       if (set_if_missing(conf, value))
> +                               warning(_("unknown value '%s' for key '%s'"), value, orig_conf_key);
> +               } else
> +                       die("internal bug in trailer.c");
A 'switch' statement might be more idiomatic and easier to read.
Show 5 quoted lines
> +       }
> +       return 0;
> +}
> --
> 1.8.5.2.201.gacc5987
Previous: Christian CouderNext: Christian Couder
Message 7 of 33 in “Add interpret-trailers builtin”
  1. 00/17 Add interpret-trailers builtinChristian Couder, Jan 30, 2014
  2. 01/17 Add data structures and basic functions for commit trailersChristian Couder, Jan 30, 2014
  3. Eric SunshineJan 30, 2014
  4. 02/17 trailer: process trailers from file and argumentsChristian Couder, Jan 30, 2014
  5. Eric SunshineJan 31, 2014
  6. 03/17 trailer: read and process config informationChristian Couder, Jan 30, 2014
  7. Eric SunshineJan 31, 2014
  8. 04/17 trailer: process command line trailer argumentsChristian Couder, Jan 30, 2014
  9. Eric SunshineJan 31, 2014
  10. 05/17 strbuf: add strbuf_isspace()Christian Couder, Jan 30, 2014
  11. Eric SunshineJan 31, 2014
  12. Eric SunshineJan 31, 2014
  13. 06/17 trailer: parse trailers from input fileChristian Couder, Jan 30, 2014
  14. Eric SunshineJan 31, 2014
  15. 07/17 trailer: put all the processing together and printChristian Couder, Jan 30, 2014
  16. 08/17 trailer: add interpret-trailers commandChristian Couder, Jan 30, 2014
  17. Eric SunshineJan 31, 2014
  18. Christian CouderFeb 6, 2014
  19. 09/17 trailer: add tests for "git interpret-trailers"Christian Couder, Jan 30, 2014
  20. 10/17 trailer: if no input file is passed, read from stdinChristian Couder, Jan 30, 2014
  21. Eric SunshineFeb 2, 2014
  22. Christian CouderFeb 6, 2014
  23. Junio C HamanoFeb 6, 2014
  24. Christian CouderFeb 9, 2014
  25. 11/17 trailer: add new_trailer_item() functionChristian Couder, Jan 30, 2014
  26. Eric SunshineFeb 2, 2014
  27. 12/17 strbuf: add strbuf_replace()Christian Couder, Jan 30, 2014
  28. Eric SunshineJan 31, 2014
  29. 13/17 trailer: execute command from 'trailer.<name>.command'Christian Couder, Jan 30, 2014
  30. 14/17 trailer: add tests for trailer commandChristian Couder, Jan 30, 2014
  31. 15/17 trailer: set author and committer env variablesChristian Couder, Jan 30, 2014
  32. 16/17 trailer: add tests for commands using env variablesChristian Couder, Jan 30, 2014
  33. 17/17 Documentation: add documentation for 'git interpret-trailers'Christian Couder, Jan 30, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.