From: Jeff King <peff@peff.net>
To: Taylor Blau <me@ttaylorr.com>
Cc: Junio C Hamano <gitster@pobox.com>,
Jacob Stopak <jacob@initialcommit.io>,
git@vger.kernel.org, martin.agren@gmail.com
Subject: Re: [RFC PATCH v2] shortlog: add group-by options for year and month
Date: Wed, 5 Oct 2022 18:26:57 -0400 [thread overview]
Message-ID: <Yz4EsT8noIoygk9b@coredump.intra.peff.net> (raw)
In-Reply-To: <Yz36eFeGyQ3ha1pw@nand.local>
On Wed, Oct 05, 2022 at 05:43:20PM -0400, Taylor Blau wrote:
> > Heh, I was about to make the exact same suggestion. The existing
> > "--group=author" could really just be "--group='%an <%ae>'" (or variants
> > depending on the "-e" flag).
>
> This caught my attention, so I wanted to see how hard it would be to
> implement. It actually is quite straightforward, and gets us most of the
> way to being able to get the same functionality as in Jacob's patch
> (minus being able to do the for-each-ref-style sub-selectors, like
> `%(authordate:format=%Y-%m)`).
Yeah, your patch is about what I'd expect.
The date thing I think can be done with --date; I just sent a sketch in
another part of the thread.
> +static void insert_record_from_pretty(struct shortlog *log,
> + struct strset *dups,
> + struct commit *commit,
> + struct pretty_print_context *ctx,
> + const char *oneline)
> +{
> + struct strbuf ident = STRBUF_INIT;
> + size_t i;
> +
> + for (i = 0; i < log->pretty.nr; i++) {
> + if (i)
> + strbuf_addch(&ident, ' ');
> +
> + format_commit_message(commit, log->pretty.items[i].string,
> + &ident, ctx);
> + }
So here you're allowing multiple pretty options. But really, once we
allow the user an arbitrary format, is there any reason for them to do:
git shortlog --group=%an --group=%ad
versus just:
git shortlog --group='%an %ad'
?
> void shortlog_add_commit(struct shortlog *log, struct commit *commit)
> {
> struct strbuf ident = STRBUF_INIT;
> @@ -243,6 +266,8 @@ void shortlog_add_commit(struct shortlog *log, struct commit *commit)
> if (log->groups & SHORTLOG_GROUP_TRAILER) {
> insert_records_from_trailers(log, &dups, commit, &ctx, oneline_str);
> }
> + if (log->groups & SHORTLOG_GROUP_PRETTY)
> + insert_record_from_pretty(log, &dups, commit, &ctx, oneline_str);
I was puzzled at first that this was a bitwise check. But I forgot that
we added support for --group options already, in 63d24fa0b0 (shortlog:
allow multiple groups to be specified, 2020-09-27).
So a plan like:
git shortlog --group=author --group=date
(as in the original patch in this thread) doesn't quite work, I think.
Because the semantics for multiple --group lines are that the commit is
credited individually to each ident. That's what lets you do:
git shortlog -ns --group=author --group=trailer:co-authored-by
and credit authors and co-authors equally. So likewise, I think multiple
group-format options don't really make sense (or at least, do not make
sense to concatenate; you'd put each key in its own single format).
> @@ -321,8 +346,10 @@ static int parse_group_option(const struct option *opt, const char *arg, int uns
> else if (skip_prefix(arg, "trailer:", &field)) {
> log->groups |= SHORTLOG_GROUP_TRAILER;
> string_list_append(&log->trailers, field);
> - } else
> - return error(_("unknown group type: %s"), arg);
> + } else {
> + log->groups |= SHORTLOG_GROUP_PRETTY;
> + string_list_append(&log->pretty, arg);
> + }
We probably want to insist that the format contains a "%" sign, and/or
git it a keyword like "format:". Otherwise a typo like:
git shortlog --format=autor
stops being an error we detect, and just returns nonsense results
(every commit has the same ident).
I think you'd want to detect SHORTLOG_GROUP_PRETTY in the
read_from_stdin() path, too. And probably just die() with "not
supported", like we do for trailers.
> I think you could also do some cleanup on top, like replacing the
> SHORTLOG_GROUP_AUTHOR mode with adding either "%aN <%aE>" (or "%aN",
> without --email) as an entry in the `pretty` string_list.
Yeah, that would be a nice cleanup. I think might even be a good idea to
explain the various options to the users in terms of "--author is
equivalent to %aN <%aE>". It may help them understand how the tool
works.
-Peff
next prev parent reply other threads:[~2022-10-05 22:27 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-22 6:18 [RFC PATCH] shortlog: add group-by options for year and month Jacob Stopak
2022-09-22 15:46 ` Martin Ågren
2022-09-22 23:25 ` [RFC PATCH v2] " Jacob Stopak
2022-09-23 16:17 ` Junio C Hamano
2022-09-23 21:19 ` Jacob Stopak
2022-09-23 21:58 ` Jeff King
2022-09-23 22:06 ` Junio C Hamano
2022-09-24 4:38 ` Jacob Stopak
2022-10-05 22:14 ` Jeff King
2022-10-05 21:43 ` Taylor Blau
2022-10-05 22:26 ` Jeff King [this message]
2022-10-07 0:48 ` Jacob Stopak
2022-10-07 21:59 ` Taylor Blau
2022-10-11 0:59 ` Jeff King
2022-10-07 22:24 ` Taylor Blau
2022-10-11 1:00 ` 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=Yz4EsT8noIoygk9b@coredump.intra.peff.net \
--to=peff@peff.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jacob@initialcommit.io \
--cc=martin.agren@gmail.com \
--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).