Re: [PATCH 2/2] pretty: add '%aA' to show domain-part of email addresses
- From
Kousik Sanagavarapu <five231003@gmail.com>
- Date
- Oct 27, 2023, 18:40 UTC
- Message-ID
- <20231027184357.21049-1-five231003@gmail.com>
- In-Reply-To
- <20231026-pretty-email-domain-v1-2-5d6bfa6615c0@gmail.com>
Hi Liam,
Liam Beguin <liambeguin@gmail.com> wrote:
> Subject: Re: [PATCH 2/2] pretty: add '%aA' to show domain-part of email addresses
Since we are adding both '%aa' and '%aA', it would be better to to include both in the commit subject, but since it is already long enough, in my opinion
pretty: add formats for domain-part of email address
would convey the gist of the commit to the reader better.
Show 8 quoted lines
> Many reports use the email domain to keep track of organizations > contributing to projects. > Add support for formatting the domain-part of a contributor's address so > that this can be done using git itself, with something like: > > git shortlog -sn --group=format:%aA v2.41.0..v2.42.0 > > Signed-off-by: Liam Beguin <liambeguin@gmail.com>
A very very very minor nit but the commit message would read better as
... contributing to projects, so add support for ...
Feel free to ignore it.
Show 62 quoted lines
> ---
> Documentation/pretty-formats.txt | 6 ++++++
> pretty.c | 13 ++++++++++++-
> t/t4203-mailmap.sh | 28 ++++++++++++++++++++++++++++
> t/t6006-rev-list-format.sh | 6 ++++--
> 4 files changed, 50 insertions(+), 3 deletions(-)
>
> diff --git a/Documentation/pretty-formats.txt b/Documentation/pretty-formats.txt
> index a22f6fceecdd..72102a681c3a 100644
> --- a/Documentation/pretty-formats.txt
> +++ b/Documentation/pretty-formats.txt
> @@ -195,6 +195,9 @@ The placeholders are:
> '%al':: author email local-part (the part before the '@' sign)
> '%aL':: author email local-part (see '%al') respecting .mailmap, see
> linkgit:git-shortlog[1] or linkgit:git-blame[1])
> +'%aa':: author email domain-part (the part after the '@' sign)
> +'%aA':: author email domain-part (see '%al') respecting .mailmap, see
> + linkgit:git-shortlog[1] or linkgit:git-blame[1])
> '%ad':: author date (format respects --date= option)
> '%aD':: author date, RFC2822 style
> '%ar':: author date, relative
> @@ -213,6 +216,9 @@ The placeholders are:
> '%cl':: committer email local-part (the part before the '@' sign)
> '%cL':: committer email local-part (see '%cl') respecting .mailmap, see
> linkgit:git-shortlog[1] or linkgit:git-blame[1])
> +'%ca':: committer email domain-part (the part before the '@' sign)
> +'%cA':: committer email domain-part (see '%cl') respecting .mailmap, see
> + linkgit:git-shortlog[1] or linkgit:git-blame[1])
> '%cd':: committer date (format respects --date= option)
> '%cD':: committer date, RFC2822 style
> '%cr':: committer date, relative
> diff --git a/pretty.c b/pretty.c
> index cf964b060cd1..4f5d081589ea 100644
> --- a/pretty.c
> +++ b/pretty.c
> @@ -791,7 +791,7 @@ static size_t format_person_part(struct strbuf *sb, char part,
> mail = s.mail_begin;
> maillen = s.mail_end - s.mail_begin;
>
> - if (part == 'N' || part == 'E' || part == 'L') /* mailmap lookup */
> + if (part == 'N' || part == 'E' || part == 'L' || part == 'A') /* mailmap lookup */
> mailmap_name(&mail, &maillen, &name, &namelen);
> if (part == 'n' || part == 'N') { /* name */
> strbuf_add(sb, name, namelen);
> @@ -808,6 +808,17 @@ static size_t format_person_part(struct strbuf *sb, char part,
> strbuf_add(sb, mail, maillen);
> return placeholder_len;
> }
> + if (part == 'a' || part == 'A') { /* domain-part */
> + const char *at = memchr(mail, '@', maillen);
> + if (at) {
> + at += 1;
> + maillen -= at - mail;
> + strbuf_add(sb, at, maillen);
> + } else {
> + strbuf_add(sb, mail, maillen);
> + }
> + return placeholder_len;
> + }
>
> if (!s.date_begin)
> goto skip;So, if we have a domain-name, we grab it, else (the case where we don't have '@') we grab it as-is. Looks good.
Show 74 quoted lines
> diff --git a/t/t4203-mailmap.sh b/t/t4203-mailmap.sh > index 2016132f5161..35bf7bb05bea 100755 > --- a/t/t4203-mailmap.sh > +++ b/t/t4203-mailmap.sh > @@ -624,6 +624,34 @@ test_expect_success 'Log output (local-part email address)' ' > test_cmp expect actual > ' > > +test_expect_success 'Log output (domain-part email address)' ' > + cat >expect <<-EOF && > + Author email cto@coompany.xx has domain-part coompany.xx > + Committer email $GIT_COMMITTER_EMAIL has domain-part $TEST_COMMITTER_DOMAIN > + > + Author email me@company.xx has domain-part company.xx > + Committer email $GIT_COMMITTER_EMAIL has domain-part $TEST_COMMITTER_DOMAIN > + > + Author email me@company.xx has domain-part company.xx > + Committer email $GIT_COMMITTER_EMAIL has domain-part $TEST_COMMITTER_DOMAIN > + > + Author email nick2@company.xx has domain-part company.xx > + Committer email $GIT_COMMITTER_EMAIL has domain-part $TEST_COMMITTER_DOMAIN > + > + Author email bugs@company.xx has domain-part company.xx > + Committer email $GIT_COMMITTER_EMAIL has domain-part $TEST_COMMITTER_DOMAIN > + > + Author email bugs@company.xx has domain-part company.xx > + Committer email $GIT_COMMITTER_EMAIL has domain-part $TEST_COMMITTER_DOMAIN > + > + Author email author@example.com has domain-part example.com > + Committer email $GIT_COMMITTER_EMAIL has domain-part $TEST_COMMITTER_DOMAIN > + EOF > + > + git log --pretty=format:"Author email %ae has domain-part %aa%nCommitter email %ce has domain-part %ca%n" >actual && > + test_cmp expect actual > +' > + > test_expect_success 'Log output with --use-mailmap' ' > test_config mailmap.file complex.map && > > diff --git a/t/t6006-rev-list-format.sh b/t/t6006-rev-list-format.sh > index 573eb97a0f7f..34c686becf2d 100755 > --- a/t/t6006-rev-list-format.sh > +++ b/t/t6006-rev-list-format.sh > @@ -163,11 +163,12 @@ commit $head1 > EOF > > # we don't test relative here > -test_format author %an%n%ae%n%al%n%ad%n%aD%n%at <<EOF > +test_format author %an%n%ae%n%al%aa%n%ad%n%aD%n%at <<EOF > commit $head2 > $GIT_AUTHOR_NAME > $GIT_AUTHOR_EMAIL > $TEST_AUTHOR_LOCALNAME > +$TEST_AUTHOR_DOMAIN > Thu Apr 7 15:13:13 2005 -0700 > Thu, 7 Apr 2005 15:13:13 -0700 > 1112911993 > @@ -180,11 +181,12 @@ Thu, 7 Apr 2005 15:13:13 -0700 > 1112911993 > EOF > > -test_format committer %cn%n%ce%n%cl%n%cd%n%cD%n%ct <<EOF > +test_format committer %cn%n%ce%n%cl%ca%n%cd%n%cD%n%ct <<EOF > commit $head2 > $GIT_COMMITTER_NAME > $GIT_COMMITTER_EMAIL > $TEST_COMMITTER_LOCALNAME > +$TEST_COMMITTER_DOMAIN > Thu Apr 7 15:13:13 2005 -0700 > Thu, 7 Apr 2005 15:13:13 -0700 > 1112911993 > > -- > 2.39.0
The tests look good too.
I should say I'm skeptical of the new format's name though. I know '%ad' is taken... but maybe it's just me.
Thanks