From: "René Scharfe" <rene.scharfe@lsrfire.ath.cx>
To: Junio C Hamano <gitster@pobox.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>, git@vger.kernel.org
Subject: Re: [PATCH] fmt-merge-msg: show those involved in a merged series
Date: Wed, 07 Mar 2012 22:22:19 +0100 [thread overview]
Message-ID: <4F57D18B.5090506@lsrfire.ath.cx> (raw)
In-Reply-To: <7vmx7uzq8h.fsf_-_@alter.siamese.dyndns.org>
Am 05.03.2012 22:34, schrieb Junio C Hamano:
> diff --git a/builtin/fmt-merge-msg.c b/builtin/fmt-merge-msg.c
> index c81a7fe..b2465b4 100644
> --- a/builtin/fmt-merge-msg.c
> +++ b/builtin/fmt-merge-msg.c
> @@ -27,6 +27,8 @@ int fmt_merge_msg_config(const char *key, const char *value, void *cb)
> merge_log_config = DEFAULT_MERGE_LOG_LEN;
> } else if (!strcmp(key, "merge.branchdesc")) {
> use_branch_desc = git_config_bool(key, value);
> + } else {
> + return git_default_config(key, value, cb);
> }
> return 0;
> }
> @@ -180,6 +182,89 @@ static void add_branch_desc(struct strbuf *out, const char *name)
> strbuf_release(&desc);
> }
>
> +static void record_person(int which, struct string_list *people,
> + struct commit *commit)
> +{
> + char name_buf[MAX_GITNAME], *name, *name_end;
> + struct string_list_item *elem;
> + const char *field = (which == 'a') ? "\nauthor " : "\ncommitter ";
> +
> + name = strstr(commit->buffer, field);
> + if (!name)
> + return;
> + name += strlen(field);
> + name_end = strchrnul(name, '<');
> + if (*name_end)
> + name_end--;
> + while (isspace(*name_end) && name <= name_end)
> + name_end--;
> + if (name_end < name || name + MAX_GITNAME <= name_end)
> + return;
> + memcpy(name_buf, name, name_end - name + 1);
> + name_buf[name_end - name + 1] = '\0';
> +
> + elem = string_list_lookup(people, name_buf);
> + if (!elem) {
> + elem = string_list_insert(people, name_buf);
> + elem->util = (void *) 0;
> + }
> + elem->util = (void*)(((intptr_t)elem->util) + 1);
> +}
> +
> +#define util_as_int(elem) ((intptr_t)((elem)->util))
Something that actually returns an int would fit the name better. ;)
> +
> +static int cmp_string_list_util_as_int(const void *a_, const void *b_)
> +{
> + const struct string_list_item *a = a_, *b = b_;
> + return util_as_int(b) - util_as_int(a);
> +}
> +
> +static void add_people_count(struct strbuf *out, struct string_list *people)
> +{
> + if (people->nr == 1)
> + strbuf_addf(out, "%s", people->items[0].string);
> + else if (people->nr == 2)
> + strbuf_addf(out, "%s (%d) and %s (%d)",
> + people->items[0].string,
> + (int)util_as_int(&people->items[0]),
> + people->items[1].string,
> + (int)util_as_int(&people->items[1]));
> + else if (people->nr)
> + strbuf_addf(out, "%s (%d) and others",
> + people->items[0].string,
> + (int)util_as_int(&people->items[0]));
> +}
> +
> +static int committer_is_me(const char *name)
> +{
> + int namelen = strlen(name);
> + const char *me = git_committer_info(IDENT_NO_DATE);
> + return (me && !memcmp(me, name, namelen) &&
> + !memcmp(me + namelen, " <", 2));
> +}
This looks scary due to the missing length check of me before the
memcmp() call, but is actually safe because git_committer_info() returns
a pointer to a static buffer that is just as long as name can possibly
be. Still, perhaps this is nicer instead:
const char *me = git_committer_info(IDENT_NO_DATE);
const char *rest = skip_prefix(me, name);
return rest && skip_prefix(rest, " <");
René
next prev parent reply other threads:[~2012-03-07 21:22 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-05 3:17 A possible fmt-merge-msg update? Junio C Hamano
2012-03-05 5:24 ` Linus Torvalds
2012-03-05 19:04 ` Junio C Hamano
2012-03-05 20:33 ` Linus Torvalds
2012-03-05 21:34 ` [PATCH] fmt-merge-msg: show those involved in a merged series Junio C Hamano
2012-03-05 21:46 ` Linus Torvalds
2012-03-05 21:49 ` Junio C Hamano
2012-03-07 21:22 ` René Scharfe [this message]
2012-03-07 21:59 ` Junio C Hamano
2012-03-08 17:46 ` René Scharfe
2012-03-08 19:18 ` Junio C Hamano
2012-03-08 21:31 ` Junio C Hamano
2012-03-12 21:37 ` Phil Hord
2012-03-13 21:03 ` Jeff King
2012-03-14 3:44 ` Junio C Hamano
2012-03-14 19:12 ` Phil Hord
2012-03-12 7:11 ` Jonathan Nieder
2012-03-13 1:55 ` Junio C Hamano
2012-03-13 5:23 ` Jonathan Nieder
2012-03-13 5:45 ` Junio C Hamano
2012-03-13 7:27 ` Johannes Sixt
2012-03-13 18:26 ` Junio C Hamano
2012-03-14 6:37 ` Johannes Sixt
2012-03-14 20:34 ` Junio C Hamano
2012-03-13 18:28 ` [PATCH v2 1/1] " Junio C Hamano
2012-05-11 10:31 ` [PATCH/RFC] fmt-merge-msg: add a blank line after people info Jonathan Nieder
2012-05-11 22:46 ` Junio C Hamano
2012-05-11 23:20 ` Linus Torvalds
2012-05-14 18:31 ` Junio C Hamano
2012-05-15 20:24 ` Junio C Hamano
2012-05-16 2:02 ` Linus Torvalds
2012-05-16 17:28 ` Junio C Hamano
2012-06-06 20:27 ` Jonathan Nieder
2012-06-06 20:46 ` Jonathan Nieder
2012-06-06 21:11 ` Junio C Hamano
2012-03-06 7:59 ` A possible fmt-merge-msg update? Jeff King
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=4F57D18B.5090506@lsrfire.ath.cx \
--to=rene.scharfe@lsrfire.ath.cx \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=torvalds@linux-foundation.org \
/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.