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

Re: [PATCH] fmt-merge-msg: show those involved in a merged series

From
René Scharfe <rene.scharfe@lsrfire.ath.cx>
Date
Mar 7, 2012, 21:22 UTC
Message-ID
<4F57D18B.5090506@lsrfire.ath.cx>
In-Reply-To
<7vmx7uzq8h.fsf_-_@alter.siamese.dyndns.org>
Am 05.03.2012 22:34, schrieb Junio C Hamano:
Show 47 quoted lines
> 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. ;)
Show 30 quoted lines
> +
> +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é
Previous: Junio C HamanoNext: Junio C Hamano
Message 8 of 36 in “A possible fmt-merge-msg update?”
  1. Junio C HamanoMar 5, 2012
  2. Linus TorvaldsMar 5, 2012
  3. Junio C HamanoMar 5, 2012
  4. Linus TorvaldsMar 5, 2012
  5. fmt-merge-msg: show those involved in a merged seriesJunio C Hamano, Mar 5, 2012
  6. Linus TorvaldsMar 5, 2012
  7. Junio C HamanoMar 5, 2012
  8. René ScharfeMar 7, 2012
  9. Junio C HamanoMar 7, 2012
  10. René ScharfeMar 8, 2012
  11. Junio C HamanoMar 8, 2012
  12. Junio C HamanoMar 8, 2012
  13. Phil HordMar 12, 2012
  14. Jeff KingMar 13, 2012
  15. Junio C HamanoMar 14, 2012
  16. Phil HordMar 14, 2012
  17. Jonathan NiederMar 12, 2012
  18. Junio C HamanoMar 13, 2012
  19. Jonathan NiederMar 13, 2012
  20. Junio C HamanoMar 13, 2012
  21. Johannes SixtMar 13, 2012
  22. Junio C HamanoMar 13, 2012
  23. Johannes SixtMar 14, 2012
  24. Junio C HamanoMar 14, 2012
  25. 1/1 fmt-merge-msg: show those involved in a merged seriesJunio C Hamano, Mar 13, 2012
  26. fmt-merge-msg: add a blank line after people infoJonathan Nieder, May 11, 2012
  27. Junio C HamanoMay 11, 2012
  28. Linus TorvaldsMay 11, 2012
  29. Junio C HamanoMay 14, 2012
  30. Junio C HamanoMay 15, 2012
  31. Linus TorvaldsMay 16, 2012
  32. Junio C HamanoMay 16, 2012
  33. Jonathan NiederJun 6, 2012
  34. Jonathan NiederJun 6, 2012
  35. Junio C HamanoJun 6, 2012
  36. Jeff KingMar 6, 2012

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.