2009-02-08 15:34:27 +01:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
test_description='.mailmap configurations'
|
|
|
|
|
|
|
|
. ./test-lib.sh
|
|
|
|
|
2010-10-15 19:12:19 +02:00
|
|
|
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
|
|
|
|
" "$@"
|
|
|
|
}
|
|
|
|
|
2009-02-08 15:34:27 +01:00
|
|
|
test_expect_success setup '
|
|
|
|
echo one >one &&
|
|
|
|
git add one &&
|
|
|
|
test_tick &&
|
|
|
|
git commit -m initial &&
|
|
|
|
echo two >>one &&
|
|
|
|
git add one &&
|
2010-10-11 17:41:16 +02:00
|
|
|
test_tick &&
|
2009-02-08 15:34:27 +01:00
|
|
|
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' '
|
2010-10-11 17:41:16 +02:00
|
|
|
mkdir -p internal_mailmap &&
|
2009-02-08 15:34:27 +01:00
|
|
|
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-existant' '
|
|
|
|
rm internal_mailmap/.mailmap &&
|
|
|
|
rmdir internal_mailmap &&
|
|
|
|
git shortlog HEAD >actual &&
|
|
|
|
test_cmp expect actual
|
|
|
|
'
|
|
|
|
|
2010-10-11 17:41:16 +02:00
|
|
|
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 &&
|
2010-10-20 08:32:06 +02:00
|
|
|
git shortlog HEAD >actual &&
|
2010-10-11 17:41:16 +02:00
|
|
|
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 &&
|
2010-10-20 08:32:06 +02:00
|
|
|
git shortlog HEAD >actual &&
|
2010-10-11 17:41:16 +02:00
|
|
|
test_cmp expect actual
|
|
|
|
'
|
|
|
|
|
2009-02-08 15:34:27 +01:00
|
|
|
cat >expect <<\EOF
|
|
|
|
A U Thor (1):
|
|
|
|
initial
|
|
|
|
|
|
|
|
nick1 (1):
|
|
|
|
second
|
|
|
|
|
|
|
|
EOF
|
|
|
|
test_expect_success 'No mailmap files, but configured' '
|
2010-10-11 17:41:16 +02:00
|
|
|
rm -f .mailmap internal_mailmap/.mailmap &&
|
2009-02-08 15:34:27 +01:00
|
|
|
git shortlog HEAD >actual &&
|
|
|
|
test_cmp expect actual
|
|
|
|
'
|
|
|
|
|
2009-02-08 15:34:30 +01:00
|
|
|
# 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 &&
|
|
|
|
|
2010-10-11 17:41:16 +02:00
|
|
|
mkdir -p internal_mailmap &&
|
2009-02-08 15:34:30 +01:00
|
|
|
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
|
2010-10-15 19:12:19 +02:00
|
|
|
^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
|
2009-02-08 15:34:30 +01:00
|
|
|
EOF
|
|
|
|
test_expect_success 'Blame output (complex mapping)' '
|
|
|
|
git blame one >actual &&
|
2010-10-15 19:12:19 +02:00
|
|
|
fuzz_blame actual >actual.fuzz &&
|
|
|
|
test_cmp expect actual.fuzz
|
2009-02-08 15:34:30 +01:00
|
|
|
'
|
|
|
|
|
2009-02-08 15:34:27 +01:00
|
|
|
test_done
|