| #!/bin/sh |
| |
| test_description='.mailmap configurations' |
| |
| . ./test-lib.sh |
| |
| fuzz_blame () { |
| sed " |
| s/$_x05[0-9a-f][0-9a-f][0-9a-f]/OBJID/g |
| s/$_x05[0-9a-f][0-9a-f]/OBJI/g |
| s/[-0-9]\{10\} [:0-9]\{8\} [-+][0-9]\{4\}/DATE/g |
| " "$@" |
| } |
| |
| test_expect_success setup ' |
| echo one >one && |
| git add one && |
| test_tick && |
| git commit -m initial && |
| echo two >>one && |
| git add one && |
| test_tick && |
| git commit --author "nick1 <bugs@company.xx>" -m second |
| ' |
| |
| cat >expect <<\EOF |
| A U Thor (1): |
| initial |
| |
| nick1 (1): |
| second |
| |
| EOF |
| |
| test_expect_success 'No mailmap' ' |
| git shortlog HEAD >actual && |
| test_cmp expect actual |
| ' |
| |
| cat >expect <<\EOF |
| Repo Guy (1): |
| initial |
| |
| nick1 (1): |
| second |
| |
| EOF |
| |
| test_expect_success 'default .mailmap' ' |
| echo "Repo Guy <author@example.com>" > .mailmap && |
| git shortlog HEAD >actual && |
| test_cmp expect actual |
| ' |
| |
| # Using a mailmap file in a subdirectory of the repo here, but |
| # could just as well have been a file outside of the repository |
| cat >expect <<\EOF |
| Internal Guy (1): |
| second |
| |
| Repo Guy (1): |
| initial |
| |
| EOF |
| test_expect_success 'mailmap.file set' ' |
| mkdir -p internal_mailmap && |
| echo "Internal Guy <bugs@company.xx>" > internal_mailmap/.mailmap && |
| git config mailmap.file internal_mailmap/.mailmap && |
| git shortlog HEAD >actual && |
| test_cmp expect actual |
| ' |
| |
| cat >expect <<\EOF |
| External Guy (1): |
| initial |
| |
| Internal Guy (1): |
| second |
| |
| EOF |
| test_expect_success 'mailmap.file override' ' |
| echo "External Guy <author@example.com>" >> internal_mailmap/.mailmap && |
| git config mailmap.file internal_mailmap/.mailmap && |
| git shortlog HEAD >actual && |
| test_cmp expect actual |
| ' |
| |
| cat >expect <<\EOF |
| Repo Guy (1): |
| initial |
| |
| nick1 (1): |
| second |
| |
| EOF |
| |
| test_expect_success 'mailmap.file non-existent' ' |
| rm internal_mailmap/.mailmap && |
| rmdir internal_mailmap && |
| git shortlog HEAD >actual && |
| test_cmp expect actual |
| ' |
| |
| cat >expect <<\EOF |
| Internal Guy (1): |
| second |
| |
| Repo Guy (1): |
| initial |
| |
| EOF |
| |
| test_expect_success 'name entry after email entry' ' |
| mkdir -p internal_mailmap && |
| echo "<bugs@company.xy> <bugs@company.xx>" >internal_mailmap/.mailmap && |
| echo "Internal Guy <bugs@company.xx>" >>internal_mailmap/.mailmap && |
| git shortlog HEAD >actual && |
| test_cmp expect actual |
| ' |
| |
| cat >expect <<\EOF |
| Internal Guy (1): |
| second |
| |
| Repo Guy (1): |
| initial |
| |
| EOF |
| |
| test_expect_success 'name entry after email entry, case-insensitive' ' |
| mkdir -p internal_mailmap && |
| echo "<bugs@company.xy> <bugs@company.xx>" >internal_mailmap/.mailmap && |
| echo "Internal Guy <BUGS@Company.xx>" >>internal_mailmap/.mailmap && |
| git shortlog HEAD >actual && |
| test_cmp expect actual |
| ' |
| |
| cat >expect <<\EOF |
| A U Thor (1): |
| initial |
| |
| nick1 (1): |
| second |
| |
| EOF |
| test_expect_success 'No mailmap files, but configured' ' |
| rm -f .mailmap internal_mailmap/.mailmap && |
| git shortlog HEAD >actual && |
| test_cmp expect actual |
| ' |
| |
| # Extended mailmap configurations should give us the following output for shortlog |
| cat >expect <<\EOF |
| A U Thor <author@example.com> (1): |
| initial |
| |
| CTO <cto@company.xx> (1): |
| seventh |
| |
| Other Author <other@author.xx> (2): |
| third |
| fourth |
| |
| Santa Claus <santa.claus@northpole.xx> (2): |
| fifth |
| sixth |
| |
| Some Dude <some@dude.xx> (1): |
| second |
| |
| EOF |
| |
| test_expect_success 'Shortlog output (complex mapping)' ' |
| echo three >>one && |
| git add one && |
| test_tick && |
| git commit --author "nick2 <bugs@company.xx>" -m third && |
| |
| echo four >>one && |
| git add one && |
| test_tick && |
| git commit --author "nick2 <nick2@company.xx>" -m fourth && |
| |
| echo five >>one && |
| git add one && |
| test_tick && |
| git commit --author "santa <me@company.xx>" -m fifth && |
| |
| echo six >>one && |
| git add one && |
| test_tick && |
| git commit --author "claus <me@company.xx>" -m sixth && |
| |
| echo seven >>one && |
| git add one && |
| test_tick && |
| git commit --author "CTO <cto@coompany.xx>" -m seventh && |
| |
| mkdir -p internal_mailmap && |
| echo "Committed <committer@example.com>" > internal_mailmap/.mailmap && |
| echo "<cto@company.xx> <cto@coompany.xx>" >> internal_mailmap/.mailmap && |
| echo "Some Dude <some@dude.xx> nick1 <bugs@company.xx>" >> internal_mailmap/.mailmap && |
| echo "Other Author <other@author.xx> nick2 <bugs@company.xx>" >> internal_mailmap/.mailmap && |
| echo "Other Author <other@author.xx> <nick2@company.xx>" >> internal_mailmap/.mailmap && |
| echo "Santa Claus <santa.claus@northpole.xx> <me@company.xx>" >> internal_mailmap/.mailmap && |
| echo "Santa Claus <santa.claus@northpole.xx> <me@company.xx>" >> internal_mailmap/.mailmap && |
| |
| git shortlog -e HEAD >actual && |
| test_cmp expect actual |
| |
| ' |
| |
| # git log with --pretty format which uses the name and email mailmap placemarkers |
| cat >expect <<\EOF |
| Author CTO <cto@coompany.xx> maps to CTO <cto@company.xx> |
| Committer C O Mitter <committer@example.com> maps to Committed <committer@example.com> |
| |
| Author claus <me@company.xx> maps to Santa Claus <santa.claus@northpole.xx> |
| Committer C O Mitter <committer@example.com> maps to Committed <committer@example.com> |
| |
| Author santa <me@company.xx> maps to Santa Claus <santa.claus@northpole.xx> |
| Committer C O Mitter <committer@example.com> maps to Committed <committer@example.com> |
| |
| Author nick2 <nick2@company.xx> maps to Other Author <other@author.xx> |
| Committer C O Mitter <committer@example.com> maps to Committed <committer@example.com> |
| |
| Author nick2 <bugs@company.xx> maps to Other Author <other@author.xx> |
| Committer C O Mitter <committer@example.com> maps to Committed <committer@example.com> |
| |
| Author nick1 <bugs@company.xx> maps to Some Dude <some@dude.xx> |
| Committer C O Mitter <committer@example.com> maps to Committed <committer@example.com> |
| |
| Author A U Thor <author@example.com> maps to A U Thor <author@example.com> |
| Committer C O Mitter <committer@example.com> maps to Committed <committer@example.com> |
| EOF |
| |
| test_expect_success 'Log output (complex mapping)' ' |
| git log --pretty=format:"Author %an <%ae> maps to %aN <%aE>%nCommitter %cn <%ce> maps to %cN <%cE>%n" >actual && |
| test_cmp expect actual |
| ' |
| |
| # git blame |
| cat >expect <<\EOF |
| ^OBJI (A U Thor DATE 1) one |
| OBJID (Some Dude DATE 2) two |
| OBJID (Other Author DATE 3) three |
| OBJID (Other Author DATE 4) four |
| OBJID (Santa Claus DATE 5) five |
| OBJID (Santa Claus DATE 6) six |
| OBJID (CTO DATE 7) seven |
| EOF |
| test_expect_success 'Blame output (complex mapping)' ' |
| git blame one >actual && |
| fuzz_blame actual >actual.fuzz && |
| test_cmp expect actual.fuzz |
| ' |
| |
| test_done |