@@ -1133,6 +1133,111 @@ test_expect_success 'git cat-file --batch-command returns correct size with --us
11331133 test_cmp expect actual
11341134'
11351135
1136+ test_expect_success ' git cat-file --batch-command mailmap yes enables mailmap mid-stream' '
1137+ test_when_finished "rm .mailmap" &&
1138+ cat >.mailmap <<-\EOF &&
1139+ C O Mitter <committer@example.com> Orig <orig@example.com>
1140+ EOF
1141+ commit_sha=$(git rev-parse HEAD) &&
1142+ git cat-file commit HEAD >commit_no_mailmap.out &&
1143+ git cat-file --use-mailmap commit HEAD >commit_mailmap.out &&
1144+ size_no_mailmap=$(wc -c <commit_no_mailmap.out) &&
1145+ size_mailmap=$(wc -c <commit_mailmap.out) &&
1146+ printf "info HEAD\nmailmap yes\ninfo HEAD\n" | git cat-file --batch-command >actual &&
1147+ echo $commit_sha commit $size_no_mailmap >expect &&
1148+ echo $commit_sha commit $size_mailmap >>expect &&
1149+ test_cmp expect actual
1150+ '
1151+
1152+ test_expect_success ' git cat-file --batch-command mailmap no disables mailmap mid-stream' '
1153+ test_when_finished "rm .mailmap" &&
1154+ cat >.mailmap <<-\EOF &&
1155+ C O Mitter <committer@example.com> Orig <orig@example.com>
1156+ EOF
1157+ commit_sha=$(git rev-parse HEAD) &&
1158+ git cat-file commit HEAD >commit_no_mailmap.out &&
1159+ git cat-file --use-mailmap commit HEAD >commit_mailmap.out &&
1160+ size_no_mailmap=$(wc -c <commit_no_mailmap.out) &&
1161+ size_mailmap=$(wc -c <commit_mailmap.out) &&
1162+ printf "mailmap yes\ninfo HEAD\nmailmap no\ninfo HEAD\n" | git cat-file --batch-command >actual &&
1163+ echo $commit_sha commit $size_mailmap >expect &&
1164+ echo $commit_sha commit $size_no_mailmap >>expect &&
1165+ test_cmp expect actual
1166+ '
1167+
1168+ test_expect_success ' git cat-file --batch-command mailmap works in --buffer mode' '
1169+ test_when_finished "rm .mailmap" &&
1170+ cat >.mailmap <<-\EOF &&
1171+ C O Mitter <committer@example.com> Orig <orig@example.com>
1172+ EOF
1173+ commit_sha=$(git rev-parse HEAD) &&
1174+ git cat-file commit HEAD >commit_no_mailmap.out &&
1175+ git cat-file --use-mailmap commit HEAD >commit_mailmap.out &&
1176+ size_no_mailmap=$(wc -c <commit_no_mailmap.out) &&
1177+ size_mailmap=$(wc -c <commit_mailmap.out) &&
1178+ printf "mailmap yes\ninfo HEAD\nmailmap no\ninfo HEAD\nflush\n" | git cat-file --batch-command --buffer >actual &&
1179+ echo $commit_sha commit $size_mailmap >expect &&
1180+ echo $commit_sha commit $size_no_mailmap >>expect &&
1181+ test_cmp expect actual
1182+ '
1183+
1184+ test_expect_success ' git cat-file --batch-command mailmap no overrides startup --mailmap' '
1185+ test_when_finished "rm .mailmap" &&
1186+ cat >.mailmap <<-\EOF &&
1187+ C O Mitter <committer@example.com> Orig <orig@example.com>
1188+ EOF
1189+ commit_sha=$(git rev-parse HEAD) &&
1190+ git cat-file --use-mailmap commit HEAD >commit_mailmap.out &&
1191+ size_mailmap=$(wc -c <commit_mailmap.out) &&
1192+ git cat-file commit HEAD >commit_no_mailmap.out &&
1193+ size_no_mailmap=$(wc -c <commit_no_mailmap.out) &&
1194+ printf "info HEAD\nmailmap no\ninfo HEAD\n" | \
1195+ git cat-file --mailmap --batch-command >actual &&
1196+ echo $commit_sha commit $size_mailmap >expect &&
1197+ echo $commit_sha commit $size_no_mailmap >>expect &&
1198+ test_cmp expect actual
1199+ '
1200+
1201+ test_expect_success ' git cat-file --batch-command mailmap yes overrides startup --no-mailmap' '
1202+ test_when_finished "rm .mailmap" &&
1203+ cat >.mailmap <<-\EOF &&
1204+ C O Mitter <committer@example.com> Orig <orig@example.com>
1205+ EOF
1206+ commit_sha=$(git rev-parse HEAD) &&
1207+ git cat-file commit HEAD >commit_no_mailmap.out &&
1208+ size_no_mailmap=$(wc -c <commit_no_mailmap.out) &&
1209+ git cat-file --use-mailmap commit HEAD >commit_mailmap.out &&
1210+ size_mailmap=$(wc -c <commit_mailmap.out) &&
1211+ printf "info HEAD\nmailmap yes\ninfo HEAD\n" | \
1212+ git cat-file --no-mailmap --batch-command >actual &&
1213+ echo $commit_sha commit $size_no_mailmap >expect &&
1214+ echo $commit_sha commit $size_mailmap >>expect &&
1215+ test_cmp expect actual
1216+ '
1217+
1218+ test_expect_success ' git cat-file --batch-command mailmap accepts true/false' '
1219+ test_when_finished "rm .mailmap" &&
1220+ cat >.mailmap <<-\EOF &&
1221+ C O Mitter <committer@example.com> Orig <orig@example.com>
1222+ EOF
1223+ commit_sha=$(git rev-parse HEAD) &&
1224+ git cat-file commit HEAD >commit_no_mailmap.out &&
1225+ size_no_mailmap=$(wc -c <commit_no_mailmap.out) &&
1226+ git cat-file --use-mailmap commit HEAD >commit_mailmap.out &&
1227+ size_mailmap=$(wc -c <commit_mailmap.out) &&
1228+ printf "mailmap true\ninfo HEAD\nmailmap false\ninfo HEAD\n" | \
1229+ git cat-file --batch-command >actual &&
1230+ echo $commit_sha commit $size_mailmap >expect &&
1231+ echo $commit_sha commit $size_no_mailmap >>expect &&
1232+ test_cmp expect actual
1233+ '
1234+
1235+ test_expect_success ' git cat-file --batch-command mailmap rejects invalid boolean' '
1236+ echo "mailmap maybe" >in &&
1237+ test_must_fail git cat-file --batch-command <in 2>err &&
1238+ test_grep "mailmap: invalid boolean .*maybe" err
1239+ '
1240+
11361241test_expect_success ' git cat-file --mailmap works with different author and committer' '
11371242 test_when_finished "rm .mailmap" &&
11381243 cat >.mailmap <<-\EOF &&
0 commit comments