From: Junio C Hamano <gitster@pobox.com>
To: Christian Couder <chriscool@tuxfamily.org>
Cc: git@vger.kernel.org, Johan Herland <johan@herland.net>,
Josh Triplett <josh@joshtriplett.org>,
Thomas Rast <tr@thomasrast.ch>,
Michael Haggerty <mhagger@alum.mit.edu>,
Dan Carpenter <dan.carpenter@oracle.com>,
Greg Kroah-Hartman <greg@kroah.com>, Jeff King <peff@peff.net>
Subject: Re: [PATCH v2 04/16] trailer: process command line trailer arguments
Date: Tue, 21 Jan 2014 14:41:01 -0800 [thread overview]
Message-ID: <xmqqd2jlt0ua.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <20140119085355.2734.58646.chriscool@tuxfamily.org> (Christian Couder's message of "Sun, 19 Jan 2014 09:53:42 +0100")
Christian Couder <chriscool@tuxfamily.org> writes:
> This patch parses the trailer command line arguments
> and put the result into an arg_tok doubly linked
> list.
>
> Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
> ---
> trailer.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 77 insertions(+)
>
> diff --git a/trailer.c b/trailer.c
> index e7d8244..bb1fcfb 100644
> --- a/trailer.c
> +++ b/trailer.c
> @@ -363,3 +363,80 @@ static int git_trailer_config(const char *conf_key, const char *value, void *cb)
> }
> return 0;
> }
> +
> +static void parse_trailer(struct strbuf *tok, struct strbuf *val, const char *trailer)
> +{
> + char *end = strchr(trailer, '=');
> + if (!end)
> + end = strchr(trailer, ':');
> + if (end) {
> + strbuf_add(tok, trailer, end - trailer);
> + strbuf_trim(tok);
> + strbuf_addstr(val, end + 1);
> + strbuf_trim(val);
> + } else {
> + strbuf_addstr(tok, trailer);
> + strbuf_trim(tok);
> + }
> +}
> +
> +static struct trailer_item *create_trailer_item(const char *string)
> +{
> + struct strbuf tok = STRBUF_INIT;
> + struct strbuf val = STRBUF_INIT;
> + struct trailer_item *new;
> +
> + parse_trailer(&tok, &val, string);
> +
> + int tok_alnum_len = alnum_len(tok.buf, tok.len);
decl-after-stmt.
> +
> + /* Lookup if the token matches something in the config */
> + struct trailer_item *item;
> + for (item = first_conf_item; item; item = item->next)
> + {
> + if (!strncasecmp(tok.buf, item->conf->key, tok_alnum_len) ||
> + !strncasecmp(tok.buf, item->conf->name, tok_alnum_len)) {
> + new = xcalloc(sizeof(struct trailer_item), 1);
> + new->conf = item->conf;
> + new->token = xstrdup(item->conf->key);
> + new->value = strbuf_detach(&val, NULL);
> + strbuf_release(&tok);
> + return new;
> + }
> + }
> +
> + new = xcalloc(sizeof(struct trailer_item), 1);
> + new->conf = xcalloc(sizeof(struct conf_info), 1);
> + new->token = strbuf_detach(&tok, NULL);
> + new->value = strbuf_detach(&val, NULL);
> +
> + return new;
> +}
> +
> +static void add_trailer_item(struct trailer_item **first,
> + struct trailer_item **last,
> + struct trailer_item *new)
> +{
> + if (!*last) {
> + *first = new;
> + *last = new;
> + } else {
> + (*last)->next = new;
> + new->previous = *last;
> + *last = new;
> + }
> +}
> +
> +static struct trailer_item *process_command_line_args(int argc, const char **argv)
> +{
> + int i;
> + struct trailer_item *arg_tok_first = NULL;
> + struct trailer_item *arg_tok_last = NULL;
> +
> + for (i = 0; i < argc; i++) {
> + struct trailer_item *new = create_trailer_item(argv[i]);
> + add_trailer_item(&arg_tok_first, &arg_tok_last, new);
> + }
> +
> + return arg_tok_first;
> +}
next prev parent reply other threads:[~2014-01-21 22:41 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-19 8:53 [PATCH v2 00/16] Add interpret-trailers builtin Christian Couder
2014-01-19 8:53 ` [PATCH v2 01/16] Add data structures and basic functions for commit trailers Christian Couder
2014-01-19 8:53 ` [PATCH v2 02/16] trailer: process trailers from file and arguments Christian Couder
2014-01-19 8:53 ` [PATCH v2 03/16] trailer: read and process config information Christian Couder
2014-01-19 8:53 ` [PATCH v2 04/16] trailer: process command line trailer arguments Christian Couder
2014-01-21 22:41 ` Junio C Hamano [this message]
2014-01-21 22:50 ` Junio C Hamano
2014-01-26 17:28 ` Christian Couder
2014-01-19 8:53 ` [PATCH v2 05/16] strbuf: add strbuf_isspace() Christian Couder
2014-01-19 8:53 ` [PATCH v2 06/16] trailer: parse trailers from input file Christian Couder
2014-01-19 8:53 ` [PATCH v2 07/16] trailer: put all the processing together and print Christian Couder
2014-01-19 8:53 ` [PATCH v2 08/16] trailer: add interpret-trailers command Christian Couder
2014-01-19 8:53 ` [PATCH v2 09/16] trailer: add tests for "git interpret-trailers" Christian Couder
2014-01-19 8:53 ` [PATCH v2 10/16] trailer: if no input file is passed, read from stdin Christian Couder
2014-01-19 8:53 ` [PATCH v2 11/16] trailer: add new_trailer_item() function Christian Couder
2014-01-19 8:53 ` [PATCH v2 12/16] strbuf: add strbuf_replace() Christian Couder
2014-01-19 8:53 ` [PATCH v2 13/16] trailer: execute command from 'trailer.<name>.command' Christian Couder
2014-01-19 8:53 ` [PATCH v2 14/16] trailer: add tests for trailer command Christian Couder
2014-01-19 8:53 ` [PATCH v2 15/16] trailer: set author and committer env variables Christian Couder
2014-01-19 8:53 ` [PATCH v2 16/16] trailer: add tests for commands using " Christian Couder
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqd2jlt0ua.fsf@gitster.dls.corp.google.com \
--to=gitster@pobox.com \
--cc=chriscool@tuxfamily.org \
--cc=dan.carpenter@oracle.com \
--cc=git@vger.kernel.org \
--cc=greg@kroah.com \
--cc=johan@herland.net \
--cc=josh@joshtriplett.org \
--cc=mhagger@alum.mit.edu \
--cc=peff@peff.net \
--cc=tr@thomasrast.ch \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.