#!/bin/sh test_description='.mailmap configurations' . ./test-lib.sh test_expect_success setup ' echo one >one && git add one && test_tick && git commit -m initial && echo two >>one && git add one && git commit --author "nick1 " -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 " > .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 internal_mailmap && echo "Internal Guy " > 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 " >> 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-existant' ' rm internal_mailmap/.mailmap && rmdir internal_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 .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 (1): initial CTO (1): seventh Other Author (2): third fourth Santa Claus (2): fifth sixth Some Dude (1): second EOF test_expect_success 'Shortlog output (complex mapping)' ' echo three >>one && git add one && test_tick && git commit --author "nick2 " -m third && echo four >>one && git add one && test_tick && git commit --author "nick2 " -m fourth && echo five >>one && git add one && test_tick && git commit --author "santa " -m fifth && echo six >>one && git add one && test_tick && git commit --author "claus " -m sixth && echo seven >>one && git add one && test_tick && git commit --author "CTO " -m seventh && mkdir internal_mailmap && echo "Committed " > internal_mailmap/.mailmap && echo " " >> internal_mailmap/.mailmap && echo "Some Dude nick1 " >> internal_mailmap/.mailmap && echo "Other Author nick2 " >> internal_mailmap/.mailmap && echo "Other Author " >> internal_mailmap/.mailmap && echo "Santa Claus " >> internal_mailmap/.mailmap && echo "Santa Claus " >> 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 maps to CTO Committer C O Mitter maps to Committed Author claus maps to Santa Claus Committer C O Mitter maps to Committed Author santa maps to Santa Claus Committer C O Mitter maps to Committed Author nick2 maps to Other Author Committer C O Mitter maps to Committed Author nick2 maps to Other Author Committer C O Mitter maps to Committed Author nick1 maps to Some Dude Committer C O Mitter maps to Committed Author A U Thor maps to A U Thor Committer C O Mitter maps to Committed 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 ^3a2fdcb (A U Thor 2005-04-07 15:13:13 -0700 1) one 7de6f99b (Some Dude 2005-04-07 15:13:13 -0700 2) two 5815879d (Other Author 2005-04-07 15:14:13 -0700 3) three ff859d96 (Other Author 2005-04-07 15:15:13 -0700 4) four 5ab6d4fa (Santa Claus 2005-04-07 15:16:13 -0700 5) five 38a42d8b (Santa Claus 2005-04-07 15:17:13 -0700 6) six 8ddc0386 (CTO 2005-04-07 15:18:13 -0700 7) seven EOF test_expect_success 'Blame output (complex mapping)' ' git blame one >actual && test_cmp expect actual ' test_done