Hi Liam, Liam Beguin <liambeguin@xxxxxxxxx> 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. > 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@xxxxxxxxx> 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. > --- > 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. > 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@xxxxxxxxxxx has domain-part coompany.xx > + Committer email $GIT_COMMITTER_EMAIL has domain-part $TEST_COMMITTER_DOMAIN > + > + Author email me@xxxxxxxxxx has domain-part company.xx > + Committer email $GIT_COMMITTER_EMAIL has domain-part $TEST_COMMITTER_DOMAIN > + > + Author email me@xxxxxxxxxx has domain-part company.xx > + Committer email $GIT_COMMITTER_EMAIL has domain-part $TEST_COMMITTER_DOMAIN > + > + Author email nick2@xxxxxxxxxx has domain-part company.xx > + Committer email $GIT_COMMITTER_EMAIL has domain-part $TEST_COMMITTER_DOMAIN > + > + Author email bugs@xxxxxxxxxx has domain-part company.xx > + Committer email $GIT_COMMITTER_EMAIL has domain-part $TEST_COMMITTER_DOMAIN > + > + Author email bugs@xxxxxxxxxx has domain-part company.xx > + Committer email $GIT_COMMITTER_EMAIL has domain-part $TEST_COMMITTER_DOMAIN > + > + Author email author@xxxxxxxxxxx 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