git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Jeff King <peff@peff.net>
To: Taylor Blau <me@ttaylorr.com>
Cc: git@vger.kernel.org, jacob@initialcommit.io, gitster@pobox.com
Subject: Re: [PATCH 5/7] shortlog: implement `--group=author` in terms of `--group=<format>`
Date: Mon, 10 Oct 2022 21:34:42 -0400	[thread overview]
Message-ID: <Y0TIMlrrifYKuBnR@coredump.intra.peff.net> (raw)
In-Reply-To: <55a6ef7bc0082818fa51a0915c43002ede5c449f.1665448437.git.me@ttaylorr.com>

On Mon, Oct 10, 2022 at 08:34:15PM -0400, Taylor Blau wrote:

> Instead of handling SHORTLOG_GROUP_AUTHOR separately, reimplement it as
> a special case of the new `--group=<format>` mode, where the author mode
> is a shorthand for `--group='%aN <%aE>'.

OK, this should be a nice cleanup.

> diff --git a/builtin/log.c b/builtin/log.c
> index ee19dc5d45..6b77e520b5 100644
> --- a/builtin/log.c
> +++ b/builtin/log.c
> @@ -1334,6 +1334,7 @@ static void make_cover_letter(struct rev_info *rev, int use_separate_file,
>  	log.in2 = 4;
>  	log.file = rev->diffopt.file;
>  	log.groups = SHORTLOG_GROUP_AUTHOR;
> +	shortlog_init_group(&log);
>  	for (i = 0; i < nr; i++)
>  		shortlog_add_commit(&log, list[i]);

In another caller you drop the assignment of log.groups, since
shortlog_init_group() already does so if log.groups is 0 (which it will
be, since shortlog_init() will zero-initialize).

Should we do the same here? Or maybe leaving it is more obvious. It
would be more obvious still if we made the helper take the type, like:

  shortlog_init_group(&log, SHORTLOG_GROUP_AUTHOR);

But I guess that is not accurate, as we'd eventually use this in
shortlog.c to turn _any_ bits we've accumulated in log.group into their
correct formats.

I think the name of the helper function puzzled me a bit. It is really
"finish up any setup for the shortlog struct". We could lazily do it in
shortlog_add_commit(), but that's pretty subtle. But could we maybe call
it:

  shortlog_finish_setup();

or something? I dunno. I might be nit-picking, but I actually had to
scratch my head quite a bit to understand what was going on here.

> diff --git a/builtin/shortlog.c b/builtin/shortlog.c
> index f708d96558..aac8c7afa4 100644
> --- a/builtin/shortlog.c
> +++ b/builtin/shortlog.c
> @@ -245,15 +245,6 @@ void shortlog_add_commit(struct shortlog *log, struct commit *commit)
>  	}
>  	oneline_str = oneline.len ? oneline.buf : "<none>";
>  
> -	if (log->groups & SHORTLOG_GROUP_AUTHOR) {
> -		strbuf_reset(&ident);
> -		format_commit_message(commit,
> -				      log->email ? "%aN <%aE>" : "%aN",
> -				      &ident, &ctx);
> -		if (!HAS_MULTI_BITS(log->groups) ||
> -		    strset_add(&dups, ident.buf))
> -			insert_one_record(log, ident.buf, oneline_str);
> -	}

This loses the HAS_MULTI_BITS() optimization. The idea there is that if
you have a single group-by that can't produce multiple outputs, then
there's no need to do duplicate detection.

The equivalent in an all-formats world is something like:

  log.format.nr > 1 && !log.trailers.nr

(because trailers are special in that one trailer key can produce
multiple idents for a single commit).

> +void shortlog_init_group(struct shortlog *log)
> +{
> +	if (!log->groups)
> +		log->groups = SHORTLOG_GROUP_AUTHOR;
> +
> +	if (log->groups & SHORTLOG_GROUP_AUTHOR)
> +		string_list_append(&log->format,
> +				   log->email ? "%aN <%aE>" : "%aN");
> +}

Regardless of the naming suggestion I made, I think things would be more
obvious if this top conditional remained in cmd_shortlog(). And then the
explicit assignment of "log.group" in make_cover_letter() would remain.

> @@ -439,8 +440,8 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix)
>  	log.file = rev.diffopt.file;
>  	log.date_mode = rev.date_mode;
>  
> -	if (!log.groups)
> -		log.groups = SHORTLOG_GROUP_AUTHOR;
> +	shortlog_init_group(&log);
> +
>  	string_list_sort(&log.trailers);

Now that we have a "finish the shortlog init" function, probably this
trailer sort should go into it, too. The current caller doesn't need it,
but it removes on more gotcha from using the shortlog API.

-Peff

  reply	other threads:[~2022-10-11  1:35 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-11  0:33 [PATCH 0/7] shortlog: introduce `--group=<format>` Taylor Blau
2022-10-11  0:34 ` [PATCH 1/7] Documentation: extract date-options.txt Taylor Blau
2022-10-11  0:54   ` Jeff King
2022-10-11  1:02     ` Taylor Blau
2022-10-11  0:34 ` [PATCH 2/7] shortlog: accept `--date`-related options Taylor Blau
2022-10-11  0:48   ` Jeff King
2022-10-11  1:14     ` Taylor Blau
2022-10-11  0:34 ` [PATCH 3/7] shortlog: extract `--group` fragment for translation Taylor Blau
2022-10-11 10:55   ` Ævar Arnfjörð Bjarmason
2022-10-11 13:24     ` Jeff King
2022-10-11  0:34 ` [PATCH 4/7] shortlog: support arbitrary commit format `--group`s Taylor Blau
2022-10-11  1:12   ` Jeff King
2022-10-11  1:24     ` Taylor Blau
2022-10-11  1:28       ` Taylor Blau
2022-10-11  2:03         ` Jeff King
2022-10-11  2:02       ` Jeff King
2022-10-21  2:39         ` Taylor Blau
2022-10-21  5:21           ` Jeff King
2022-10-21 22:12             ` Taylor Blau
2022-10-11  0:34 ` [PATCH 5/7] shortlog: implement `--group=author` in terms of `--group=<format>` Taylor Blau
2022-10-11  1:34   ` Jeff King [this message]
2022-10-11  1:48     ` Taylor Blau
2022-10-11  2:15       ` Jeff King
2022-10-21  2:03         ` Taylor Blau
2022-10-21  2:02       ` Taylor Blau
2022-10-21  5:03         ` Jeff King
2022-10-21 22:05           ` Taylor Blau
2022-10-11 10:57   ` Ævar Arnfjörð Bjarmason
2022-10-11 11:07     ` Ævar Arnfjörð Bjarmason
2022-10-11  0:34 ` [PATCH 6/7] shortlog: implement `--group=committer` " Taylor Blau
2022-10-11  1:35   ` Jeff King
2022-10-11  0:34 ` [PATCH 7/7] shortlog: implement `--group=trailer` " Taylor Blau
2022-10-11  1:50   ` Jeff King
2022-10-11  1:57     ` Jeff King
2022-10-21  1:38     ` Taylor Blau
2022-10-21  3:11 ` [PATCH v2 0/6] shortlog: introduce `--group=<format>` Taylor Blau
2022-10-21  3:11   ` [PATCH v2 1/6] shortlog: accept `--date`-related options Taylor Blau
2022-10-21  5:32     ` Jeff King
2022-10-21 21:55       ` Taylor Blau
2022-10-21  3:11   ` [PATCH v2 2/6] shortlog: make trailer insertion a noop when appropriate Taylor Blau
2022-10-21  5:38     ` Jeff King
2022-10-21 21:57       ` Taylor Blau
2022-10-21  3:11   ` [PATCH v2 3/6] shortlog: extract `--group` fragment for translation Taylor Blau
2022-10-21  5:40     ` Jeff King
2022-10-21  3:11   ` [PATCH v2 4/6] shortlog: support arbitrary commit format `--group`s Taylor Blau
2022-10-21  5:48     ` Jeff King
2022-10-21 22:07       ` Taylor Blau
2022-10-21  3:11   ` [PATCH v2 5/6] shortlog: implement `--group=author` in terms of `--group=<format>` Taylor Blau
2022-10-21  5:50     ` Jeff King
2022-10-21  3:11   ` [PATCH v2 6/6] shortlog: implement `--group=committer` " Taylor Blau
2022-10-21  5:51     ` Jeff King
2022-10-21  5:53   ` [PATCH v2 0/6] shortlog: introduce `--group=<format>` Jeff King
2022-10-21 22:25 ` [PATCH v3 0/7] " Taylor Blau
2022-10-21 22:25   ` [PATCH v3 1/7] shortlog: accept `--date`-related options Taylor Blau
2022-10-21 22:25   ` [PATCH v3 2/7] shortlog: make trailer insertion a noop when appropriate Taylor Blau
2022-10-21 22:25   ` [PATCH v3 3/7] shortlog: extract `--group` fragment for translation Taylor Blau
2022-10-21 22:25   ` [PATCH v3 4/7] shortlog: support arbitrary commit format `--group`s Taylor Blau
2022-10-22  0:28     ` Jeff King
2022-10-21 22:25   ` [PATCH v3 5/7] shortlog: extract `shortlog_finish_setup()` Taylor Blau
2022-10-21 22:25   ` [PATCH v3 6/7] shortlog: implement `--group=author` in terms of `--group=<format>` Taylor Blau
2022-10-21 22:25   ` [PATCH v3 7/7] shortlog: implement `--group=committer` " Taylor Blau
2022-10-22  0:31   ` [PATCH v3 0/7] shortlog: introduce `--group=<format>` Jeff King
2022-10-24 18:55 ` [PATCH " Taylor Blau
2022-10-24 18:55   ` [PATCH 1/7] shortlog: accept `--date`-related options Taylor Blau
2022-10-24 18:55   ` [PATCH 2/7] shortlog: make trailer insertion a noop when appropriate Taylor Blau
2022-10-24 18:55   ` [PATCH 3/7] shortlog: extract `--group` fragment for translation Taylor Blau
2022-10-24 18:55   ` [PATCH 4/7] shortlog: support arbitrary commit format `--group`s Taylor Blau
2022-10-24 18:55   ` [PATCH 5/7] shortlog: extract `shortlog_finish_setup()` Taylor Blau
2022-10-24 18:55   ` [PATCH 6/7] shortlog: implement `--group=author` in terms of `--group=<format>` Taylor Blau
2022-10-24 18:55   ` [PATCH 7/7] shortlog: implement `--group=committer` " Taylor Blau
2022-10-24 21:59   ` [PATCH 0/7] shortlog: introduce `--group=<format>` Junio C Hamano
2022-10-24 23:45   ` 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

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Y0TIMlrrifYKuBnR@coredump.intra.peff.net \
    --to=peff@peff.net \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jacob@initialcommit.io \
    --cc=me@ttaylorr.com \
    /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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).