git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>,
	"Johannes Sixt" <j6t@kdbg.org>,
	"Johannes Schindelin" <Johannes.Schindelin@gmx.de>,
	"brian m . carlson" <sandals@crustytoothpaste.net>,
	"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
Subject: [PATCH 17/22] mailmap doc + tests: add better examples & test them
Date: Tue, 12 Jan 2021 21:18:01 +0100	[thread overview]
Message-ID: <20210112201806.13284-18-avarab@gmail.com> (raw)
In-Reply-To: <20210105130359.21139-1-avarab@gmail.com>

Change the mailmap documentation added in 0925ce4d49 (Add map_user()
and clear_mailmap() to mailmap, 2009-02-08) to continue discussing the
Jane/Joe example. I think this makes things a lot less confusing as
we're building up more complex examples using one set of data which
covers all the things we'd like to discuss.

Also add tests to assert that what our documentation says is what's
actually happening. This is mostly (or entirely) covered by existing
tests which I'm not deleting, but having these tests for the synopsis
makes it easier to follow-along while reading the tests & docs.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
 Documentation/gitmailmap.txt | 49 ++++++++++++--------
 t/t4203-mailmap.sh           | 88 ++++++++++++++++++++++++++++++++++++
 2 files changed, 117 insertions(+), 20 deletions(-)

diff --git a/Documentation/gitmailmap.txt b/Documentation/gitmailmap.txt
index 4e4677018b..55dfebd1b1 100644
--- a/Documentation/gitmailmap.txt
+++ b/Documentation/gitmailmap.txt
@@ -53,7 +53,7 @@ commit matching both the specified commit name and email address.
 EXAMPLES
 --------
 
-Example 1: Your history contains commits by two authors, Jane
+Your history contains commits by two authors, Jane
 and Joe, whose names appear in the repository under several forms:
 
 ------------
@@ -65,36 +65,45 @@ Jane D. <jane@desktop.(none)>
 ------------
 
 Now suppose that Joe wants his middle name initial used, and Jane
-prefers her family name fully spelled out. A proper `.mailmap` file
-would look like:
+prefers her family name fully spelled out. A `.mailmap` file to
+correct the names would look like:
 
 ------------
-Jane Doe         <jane@desktop.(none)>
 Joe R. Developer <joe@example.com>
+Jane Doe <jane@example.com>
+Jane Doe <jane@desktop.(none)>
 ------------
 
-Note how there is no need for an entry for `<jane@laptop.(none)>`, because the
-real name of that author is already correct.
+Note that there's no need to map the name for 'jane@laptop.(none)' to
+only correct the names. However, leaving the obviously broken
+`<jane@laptop.(none)>' and '<jane@desktop.(none)>' E-Mails as-is is
+usually not what you want. A `.mailmap` file which also corrects those
+is:
 
-Example 2: Your repository contains commits from the following
-authors:
+------------
+Joe R. Developer <joe@example.com>
+Jane Doe <jane@example.com> <jane@laptop.(none)>
+Jane Doe <jane@example.com> <jane@desktop.(none)>
+------------
+
+Finally, let's say that Joe and Jane shared an E-Mail address, but not
+a name, e.g. by having these two commits in the history generated by a
+bug reporting system. I.e. names appearing in history as:
 
 ------------
-nick1 <bugs@company.xx>
-nick2 <bugs@company.xx>
-nick2 <nick2@company.xx>
-santa <me@company.xx>
-claus <me@company.xx>
-CTO <cto@coompany.xx>
+Joe <bugs@example.com>
+Jane <bugs@example.com>
 ------------
 
-Then you might want a `.mailmap` file that looks like:
+A full `.mailmap` file which also handles those cases (an addition of
+two lines to the above example) would be:
+
 ------------
-<cto@company.xx>                       <cto@coompany.xx>
-Some Dude <some@dude.xx>         nick1 <bugs@company.xx>
-Other Author <other@author.xx>   nick2 <bugs@company.xx>
-Other Author <other@author.xx>         <nick2@company.xx>
-Santa Claus <santa.claus@northpole.xx> <me@company.xx>
+Joe R. Developer <joe@example.com>
+Jane Doe <jane@example.com> <jane@laptop.(none)>
+Jane Doe <jane@example.com> <jane@desktop.(none)>
+Joe R. Developer <joe@example.com> Joe <bugs@example.com>
+Jane Doe <jane@example.com> Jane <bugs@example.com>
 ------------
 
 
diff --git a/t/t4203-mailmap.sh b/t/t4203-mailmap.sh
index 5d92880a5a..96ba5367c6 100755
--- a/t/t4203-mailmap.sh
+++ b/t/t4203-mailmap.sh
@@ -419,6 +419,94 @@ test_expect_success 'preserve canonical email case' '
 	test_cmp expect actual
 '
 
+test_expect_success 'gitmailmap(5) example output: setup' '
+	test_create_repo doc &&
+	test_commit -C doc --author "Joe Developer <joe@example.com>" A &&
+	test_commit -C doc --author "Joe R. Developer <joe@example.com>" B &&
+	test_commit -C doc --author "Jane Doe <jane@example.com>" C &&
+	test_commit -C doc --author "Jane Doe <jane@laptop.(none)>" D &&
+	test_commit -C doc --author "Jane D. <jane@desktop.(none)>" E
+'
+
+test_expect_success 'gitmailmap(5) example output: example #1' '
+	test_config -C doc mailmap.file ../doc.map &&
+	cat >doc.map <<-\EOF &&
+	Joe R. Developer <joe@example.com>
+	Jane Doe <jane@example.com>
+	Jane Doe <jane@desktop.(none)>
+	EOF
+
+	cat >expect <<-\EOF &&
+	Author Joe Developer <joe@example.com> maps to Joe R. Developer <joe@example.com>
+	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>
+
+	Author Joe R. Developer <joe@example.com> maps to Joe R. Developer <joe@example.com>
+	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>
+
+	Author Jane Doe <jane@example.com> maps to Jane Doe <jane@example.com>
+	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>
+
+	Author Jane Doe <jane@laptop.(none)> maps to Jane Doe <jane@laptop.(none)>
+	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>
+
+	Author Jane D <jane@desktop.(none)> maps to Jane Doe <jane@desktop.(none)>
+	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>
+	EOF
+	git -C doc log --reverse --pretty=format:"Author %an <%ae> maps to %aN <%aE>%nCommitter %cn <%ce> maps to %cN <%cE>%n" >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'gitmailmap(5) example output: example #2' '
+	test_config -C doc mailmap.file ../doc.map &&
+	cat >doc.map <<-\EOF &&
+	Joe R. Developer <joe@example.com>
+	Jane Doe <jane@example.com> <jane@laptop.(none)>
+	Jane Doe <jane@example.com> <jane@desktop.(none)>
+	EOF
+
+	cat >expect <<-\EOF &&
+	Author Joe Developer <joe@example.com> maps to Joe R. Developer <joe@example.com>
+	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>
+
+	Author Joe R. Developer <joe@example.com> maps to Joe R. Developer <joe@example.com>
+	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>
+
+	Author Jane Doe <jane@example.com> maps to Jane Doe <jane@example.com>
+	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>
+
+	Author Jane Doe <jane@laptop.(none)> maps to Jane Doe <jane@example.com>
+	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>
+
+	Author Jane D <jane@desktop.(none)> maps to Jane Doe <jane@example.com>
+	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>
+	EOF
+	git -C doc log --reverse --pretty=format:"Author %an <%ae> maps to %aN <%aE>%nCommitter %cn <%ce> maps to %cN <%cE>%n" >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'gitmailmap(5) example output: example #3' '
+	test_config -C doc mailmap.file ../doc.map &&
+	cat >>doc.map <<-\EOF &&
+	Joe R. Developer <joe@example.com> Joe <bugs@example.com>
+	Jane Doe <jane@example.com> Jane <bugs@example.com>
+	EOF
+
+	test_commit -C doc --author "Joe <bugs@example.com>" F &&
+	test_commit -C doc --author "Jane <bugs@example.com>" G &&
+
+	cat >>expect <<-\EOF &&
+
+	Author Joe <bugs@example.com> maps to Joe R. Developer <joe@example.com>
+	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>
+
+	Author Jane <bugs@example.com> maps to Jane Doe <jane@example.com>
+	Committer C O Mitter <committer@example.com> maps to C O Mitter <committer@example.com>
+	EOF
+	git -C doc log --reverse --pretty=format:"Author %an <%ae> maps to %aN <%aE>%nCommitter %cn <%ce> maps to %cN <%cE>%n" >actual &&
+	test_cmp expect actual
+'
+
+
 test_expect_success 'Shortlog output (complex mapping)' '
 	test_config mailmap.file complex.map &&
 	cat >complex.map <<-EOF &&
-- 
2.29.2.222.g5d2a92d10f8


  parent reply	other threads:[~2021-01-13  0:58 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-11-25  8:11 [PATCH 2/2] git-shortlog: make common repository prefix configurable with .mailmap Junio C Hamano
2021-01-05 13:03 ` [PATCH] shortlog: remove unused(?) "repo-abbrev" feature Ævar Arnfjörð Bjarmason
2021-01-05 19:18   ` Linus Torvalds
2021-01-05 21:15   ` Martin Ågren
2021-01-05 23:06   ` Junio C Hamano
2021-01-12 20:17   ` [PATCH 00/22] mailmap: doc + test fixes Ævar Arnfjörð Bjarmason
2021-01-12 22:34     ` Junio C Hamano
2021-01-14  8:59       ` Ævar Arnfjörð Bjarmason
2021-01-14 23:02     ` [PATCH 0/2] mailmap: test cleanup Denton Liu
2021-01-14 23:02       ` [PATCH 1/2] test-lib-functions.sh: fix usage for test_commit() Denton Liu
2021-01-15  0:19         ` Ævar Arnfjörð Bjarmason
2021-01-14 23:02       ` [PATCH 2/2] t4203: stop losing return codes of git commands Denton Liu
2021-01-15  0:20         ` Ævar Arnfjörð Bjarmason
2021-01-12 20:17   ` [PATCH 01/22] mailmap doc: create a new "gitmailmap(5)" man page Ævar Arnfjörð Bjarmason
2021-01-14 17:41     ` Philippe Blain
2021-01-14 19:58       ` Junio C Hamano
2021-01-15  2:38         ` Philippe Blain
2021-01-15  3:18           ` Junio C Hamano
2021-01-15  3:36             ` Philippe Blain
2021-01-15  5:53               ` Junio C Hamano
2021-01-15  2:34     ` [PATCH] fixup! " Philippe Blain
2021-01-15  3:28       ` [PATCH v2] mailmap doc: use correct environment variable 'GIT_WORK_TREE' Philippe Blain
2021-01-12 20:17   ` [PATCH 02/22] mailmap doc: quote config variables `like.this` Ævar Arnfjörð Bjarmason
2021-01-12 20:17   ` [PATCH 03/22] check-mailmap doc: note config options Ævar Arnfjörð Bjarmason
2021-01-12 20:17   ` [PATCH 04/22] mailmap doc: start by mentioning the comment syntax Ævar Arnfjörð Bjarmason
2021-01-12 20:17   ` [PATCH 05/22] mailmap tests: use our preferred whitespace syntax Ævar Arnfjörð Bjarmason
2021-01-12 20:17   ` [PATCH 06/22] mailmap tests: modernize syntax & test idioms Ævar Arnfjörð Bjarmason
2021-01-14  7:51     ` Denton Liu
2021-01-14 20:00       ` Junio C Hamano
2021-01-12 20:17   ` [PATCH 07/22] mailmap tests: improve --stdin tests Ævar Arnfjörð Bjarmason
2021-01-12 20:17   ` [PATCH 08/22] mailmap tests: remove redundant entry in test Ævar Arnfjörð Bjarmason
2021-01-12 20:17   ` [PATCH 09/22] mailmap tests: add a test for "not a blob" error Ævar Arnfjörð Bjarmason
2021-01-12 22:34     ` Junio C Hamano
2021-01-12 20:17   ` [PATCH 10/22] mailmap tests: get rid of overly complex blame fuzzing Ævar Arnfjörð Bjarmason
2021-01-12 22:34     ` Junio C Hamano
2021-01-14 20:21       ` Junio C Hamano
2021-01-12 20:17   ` [PATCH 11/22] mailmap: test for silent exiting on missing file/blob Ævar Arnfjörð Bjarmason
2021-01-12 20:17   ` [PATCH 12/22] test-lib functions: expand "test_commit" comment template Ævar Arnfjörð Bjarmason
2021-01-12 20:17   ` [PATCH 13/22] test-lib functions: document arguments to test_commit Ævar Arnfjörð Bjarmason
2021-01-12 20:17   ` [PATCH 14/22] test-lib functions: add --author support " Ævar Arnfjörð Bjarmason
2021-01-12 22:34     ` Junio C Hamano
2021-01-14  7:40     ` Denton Liu
2021-01-12 20:17   ` [PATCH 15/22] test-lib functions: add an --append option " Ævar Arnfjörð Bjarmason
2021-01-12 20:18   ` [PATCH 16/22] tests: refactor a few tests to use "test_commit --append" Ævar Arnfjörð Bjarmason
2021-01-12 20:18   ` Ævar Arnfjörð Bjarmason [this message]
2021-01-12 20:18   ` [PATCH 18/22] mailmap tests: add a test for comment syntax Ævar Arnfjörð Bjarmason
2021-01-12 20:18   ` [PATCH 19/22] mailmap tests: add tests for whitespace syntax Ævar Arnfjörð Bjarmason
2021-01-12 20:18   ` [PATCH 20/22] mailmap tests: add tests for empty "<>" syntax Ævar Arnfjörð Bjarmason
2021-01-12 20:18   ` [PATCH 21/22] mailmap doc + tests: document and test for case-insensitivity Ævar Arnfjörð Bjarmason
2021-01-12 20:18   ` [PATCH 22/22] shortlog: remove unused(?) "repo-abbrev" feature Ævar Arnfjörð Bjarmason

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=20210112201806.13284-18-avarab@gmail.com \
    --to=avarab@gmail.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=j6t@kdbg.org \
    --cc=sandals@crustytoothpaste.net \
    /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).