(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'.mailmap configurations' span_id:6))} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: fuzz_blame body: (command.BraceGroup children: [ (C {(sed)} { (DQ ('\n') ('\t\ts/') ($ Id.VSub_DollarName '$_x05') ('[0-9a-f][0-9a-f][0-9a-f]/OBJID/g\n') ('\t\ts/') ($ Id.VSub_DollarName '$_x05') ('[0-9a-f][0-9a-f]/OBJI/g\n') ('\t\ts/[-0-9]') (Id.Lit_Other '\\') ('{10') (Id.Lit_Other '\\') ('} [:0-9]') (Id.Lit_Other '\\') ('{8') (Id.Lit_Other '\\') ('} [-+][0-9]') (Id.Lit_Other '\\') ('{4') (Id.Lit_Other '\\') ('}/DATE/g\n') ('\t') ) } {(DQ ($ Id.VSub_At '$@'))} ) ] ) ) (C {(test_expect_success)} {(setup)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:61) (Token id:Id.Lit_Chars val:'\tcat >contacts <<-\\EOF &&\n' span_id:62) (Token id:Id.Lit_Chars val:'\tA U Thor <author@example.com>\n' span_id:63) (Token id:Id.Lit_Chars val:'\tnick1 <bugs@company.xx>\n' span_id:64) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:65) (Token id:Id.Lit_Chars val:'\n' span_id:66) (Token id:Id.Lit_Chars val:'\techo one >one &&\n' span_id:67) (Token id:Id.Lit_Chars val:'\tgit add one &&\n' span_id:68) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:69) (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:70) (Token id:Id.Lit_Chars val:'\techo two >>one &&\n' span_id:71) (Token id:Id.Lit_Chars val:'\tgit add one &&\n' span_id:72) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:73) (Token id:Id.Lit_Chars val:'\tgit commit --author "nick1 <bugs@company.xx>" -m second\n' span_id:74) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'check-mailmap no arguments' span_id:81))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:85) (Token id:Id.Lit_Chars val:'\ttest_must_fail git check-mailmap\n' span_id:86) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'check-mailmap arguments' span_id:93))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:97) (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:98) (Token id:Id.Lit_Chars val:'\tA U Thor <author@example.com>\n' span_id:99) (Token id:Id.Lit_Chars val:'\tnick1 <bugs@company.xx>\n' span_id:100) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:101) (Token id:Id.Lit_Chars val:'\tgit check-mailmap \\\n' span_id:102) (Token id:Id.Lit_Chars val:'\t\t"A U Thor <author@example.com>" \\\n' span_id:103) (Token id: Id.Lit_Chars val: '\t\t"nick1 <bugs@company.xx>" >actual &&\n' span_id: 104 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:105) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'check-mailmap --stdin' span_id:112))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:116) (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:117) (Token id:Id.Lit_Chars val:'\tA U Thor <author@example.com>\n' span_id:118) (Token id:Id.Lit_Chars val:'\tnick1 <bugs@company.xx>\n' span_id:119) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:120) (Token id: Id.Lit_Chars val: '\tgit check-mailmap --stdin <contacts >actual &&\n' span_id: 121 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:122) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'check-mailmap --stdin arguments' span_id:129))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:133) (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:134) (Token id:Id.Lit_Chars val:'\tInternal Guy <bugs@company.xy>\n' span_id:135) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:136) (Token id:Id.Lit_Chars val:'\tcat <contacts >>expect &&\n' span_id:137) (Token id: Id.Lit_Chars val: '\tgit check-mailmap --stdin "Internal Guy <bugs@company.xy>" \\\n' span_id: 138 ) (Token id:Id.Lit_Chars val:'\t\t<contacts >actual &&\n' span_id:139) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:140) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'check-mailmap bogus contact' span_id:147))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:151) (Token id: Id.Lit_Chars val: '\ttest_must_fail git check-mailmap bogus\n' span_id: 152 ) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:158) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:161) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:162)) (OF) } here_end_span_id: 171 stdin_parts: [ ('A U Thor (1):\n') (' initial\n') ('\n') ('nick1 (1):\n') (' second\n') ('\n') ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'No mailmap' span_id:176))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:180) (Token id:Id.Lit_Chars val:'\tgit shortlog HEAD >actual &&\n' span_id:181) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:182) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:188) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:191) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:192)) (OF) } here_end_span_id: 201 stdin_parts: [ ('Repo Guy (1):\n') (' initial\n') ('\n') ('nick1 (1):\n') (' second\n') ('\n') ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'default .mailmap' span_id:206))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:210) (Token id: Id.Lit_Chars val: '\techo "Repo Guy <author@example.com>" > .mailmap &&\n' span_id: 211 ) (Token id:Id.Lit_Chars val:'\tgit shortlog HEAD >actual &&\n' span_id:212) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:213) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:225) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:228) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:229)) (OF) } here_end_span_id: 238 stdin_parts: [ ('Internal Guy (1):\n') (' second\n') ('\n') ('Repo Guy (1):\n') (' initial\n') ('\n') ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'mailmap.file set' span_id:242))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:246) (Token id:Id.Lit_Chars val:'\tmkdir -p internal_mailmap &&\n' span_id:247) (Token id: Id.Lit_Chars val: '\techo "Internal Guy <bugs@company.xx>" > internal_mailmap/.mailmap &&\n' span_id: 248 ) (Token id:Id.Lit_Chars val:'\tgit config mailmap.file internal_mailmap/.mailmap &&\n' span_id:249) (Token id:Id.Lit_Chars val:'\tgit shortlog HEAD >actual &&\n' span_id:250) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:251) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:257) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:260) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:261)) (OF) } here_end_span_id: 270 stdin_parts: [ ('External Guy (1):\n') (' initial\n') ('\n') ('Internal Guy (1):\n') (' second\n') ('\n') ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'mailmap.file override' span_id:274))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:278) (Token id: Id.Lit_Chars val: '\techo "External Guy <author@example.com>" >> internal_mailmap/.mailmap &&\n' span_id: 279 ) (Token id:Id.Lit_Chars val:'\tgit config mailmap.file internal_mailmap/.mailmap &&\n' span_id:280) (Token id:Id.Lit_Chars val:'\tgit shortlog HEAD >actual &&\n' span_id:281) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:282) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:288) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:291) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:292)) (OF) } here_end_span_id: 301 stdin_parts: [ ('Repo Guy (1):\n') (' initial\n') ('\n') ('nick1 (1):\n') (' second\n') ('\n') ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'mailmap.file non-existent' span_id:306))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:310) (Token id:Id.Lit_Chars val:'\trm internal_mailmap/.mailmap &&\n' span_id:311) (Token id:Id.Lit_Chars val:'\trmdir internal_mailmap &&\n' span_id:312) (Token id:Id.Lit_Chars val:'\tgit shortlog HEAD >actual &&\n' span_id:313) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:314) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:320) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:323) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:324)) (OF) } here_end_span_id: 333 stdin_parts: [ ('Internal Guy (1):\n') (' second\n') ('\n') ('Repo Guy (1):\n') (' initial\n') ('\n') ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'name entry after email entry' span_id:338))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:342) (Token id:Id.Lit_Chars val:'\tmkdir -p internal_mailmap &&\n' span_id:343) (Token id: Id.Lit_Chars val: '\techo "<bugs@company.xy> <bugs@company.xx>" >internal_mailmap/.mailmap &&\n' span_id: 344 ) (Token id: Id.Lit_Chars val: '\techo "Internal Guy <bugs@company.xx>" >>internal_mailmap/.mailmap &&\n' span_id: 345 ) (Token id:Id.Lit_Chars val:'\tgit shortlog HEAD >actual &&\n' span_id:346) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:347) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:353) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:356) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:357)) (OF) } here_end_span_id: 366 stdin_parts: [ ('Internal Guy (1):\n') (' second\n') ('\n') ('Repo Guy (1):\n') (' initial\n') ('\n') ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'name entry after email entry, case-insensitive' span_id:371))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:375) (Token id:Id.Lit_Chars val:'\tmkdir -p internal_mailmap &&\n' span_id:376) (Token id: Id.Lit_Chars val: '\techo "<bugs@company.xy> <bugs@company.xx>" >internal_mailmap/.mailmap &&\n' span_id: 377 ) (Token id: Id.Lit_Chars val: '\techo "Internal Guy <BUGS@Company.xx>" >>internal_mailmap/.mailmap &&\n' span_id: 378 ) (Token id:Id.Lit_Chars val:'\tgit shortlog HEAD >actual &&\n' span_id:379) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:380) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:386) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:389) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:390)) (OF) } here_end_span_id: 399 stdin_parts: [ ('A U Thor (1):\n') (' initial\n') ('\n') ('nick1 (1):\n') (' second\n') ('\n') ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'No mailmap files, but configured' span_id:403))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:407) (Token id: Id.Lit_Chars val: '\trm -f .mailmap internal_mailmap/.mailmap &&\n' span_id: 408 ) (Token id:Id.Lit_Chars val:'\tgit shortlog HEAD >actual &&\n' span_id:409) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:410) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup mailmap blob tests' span_id:417))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:421) (Token id:Id.Lit_Chars val:'\tgit checkout -b map &&\n' span_id:422) (Token id:Id.Lit_Chars val:'\ttest_when_finished "git checkout master" &&\n' span_id:423) (Token id:Id.Lit_Chars val:'\tcat >just-bugs <<-\\EOF &&\n' span_id:424) (Token id:Id.Lit_Chars val:'\tBlob Guy <bugs@company.xx>\n' span_id:425) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:426) (Token id:Id.Lit_Chars val:'\tcat >both <<-\\EOF &&\n' span_id:427) (Token id:Id.Lit_Chars val:'\tBlob Guy <author@example.com>\n' span_id:428) (Token id:Id.Lit_Chars val:'\tBlob Guy <bugs@company.xx>\n' span_id:429) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:430) (Token id:Id.Lit_Chars val:'\tprintf "Tricky Guy <author@example.com>" >no-newline &&\n' span_id:431) (Token id: Id.Lit_Chars val: '\tgit add just-bugs both no-newline &&\n' span_id: 432 ) (Token id:Id.Lit_Chars val:'\tgit commit -m "my mailmaps" &&\n' span_id:433) (Token id: Id.Lit_Chars val: '\techo "Repo Guy <author@example.com>" >.mailmap &&\n' span_id: 434 ) (Token id:Id.Lit_Chars val:'\techo "Internal Guy <author@example.com>" >internal.map\n' span_id:435) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'mailmap.blob set' span_id:442))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:446) (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:447) (Token id:Id.Lit_Chars val:'\tBlob Guy (1):\n' span_id:448) (Token id:Id.Lit_Chars val:'\t second\n' span_id:449) (Token id:Id.Lit_Chars val:'\n' span_id:450) (Token id:Id.Lit_Chars val:'\tRepo Guy (1):\n' span_id:451) (Token id:Id.Lit_Chars val:'\t initial\n' span_id:452) (Token id:Id.Lit_Chars val:'\n' span_id:453) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:454) (Token id: Id.Lit_Chars val: '\tgit -c mailmap.blob=map:just-bugs shortlog HEAD >actual &&\n' span_id: 455 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:456) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'mailmap.blob overrides .mailmap' span_id:463))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:467) (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:468) (Token id:Id.Lit_Chars val:'\tBlob Guy (2):\n' span_id:469) (Token id:Id.Lit_Chars val:'\t initial\n' span_id:470) (Token id:Id.Lit_Chars val:'\t second\n' span_id:471) (Token id:Id.Lit_Chars val:'\n' span_id:472) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:473) (Token id: Id.Lit_Chars val: '\tgit -c mailmap.blob=map:both shortlog HEAD >actual &&\n' span_id: 474 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:475) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'mailmap.file overrides mailmap.blob' span_id:482))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:486) (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:487) (Token id:Id.Lit_Chars val:'\tBlob Guy (1):\n' span_id:488) (Token id:Id.Lit_Chars val:'\t second\n' span_id:489) (Token id:Id.Lit_Chars val:'\n' span_id:490) (Token id:Id.Lit_Chars val:'\tInternal Guy (1):\n' span_id:491) (Token id:Id.Lit_Chars val:'\t initial\n' span_id:492) (Token id:Id.Lit_Chars val:'\n' span_id:493) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:494) (Token id:Id.Lit_Chars val:'\tgit \\\n' span_id:495) (Token id:Id.Lit_Chars val:'\t -c mailmap.blob=map:both \\\n' span_id:496) (Token id:Id.Lit_Chars val:'\t -c mailmap.file=internal.map \\\n' span_id:497) (Token id:Id.Lit_Chars val:'\t shortlog HEAD >actual &&\n' span_id:498) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:499) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'mailmap.blob can be missing' span_id:506))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:510) (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:511) (Token id:Id.Lit_Chars val:'\tRepo Guy (1):\n' span_id:512) (Token id:Id.Lit_Chars val:'\t initial\n' span_id:513) (Token id:Id.Lit_Chars val:'\n' span_id:514) (Token id:Id.Lit_Chars val:'\tnick1 (1):\n' span_id:515) (Token id:Id.Lit_Chars val:'\t second\n' span_id:516) (Token id:Id.Lit_Chars val:'\n' span_id:517) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:518) (Token id: Id.Lit_Chars val: '\tgit -c mailmap.blob=map:nonexistent shortlog HEAD >actual &&\n' span_id: 519 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:520) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'mailmap.blob defaults to off in non-bare repo' span_id:527))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:531) (Token id:Id.Lit_Chars val:'\tgit init non-bare &&\n' span_id:532) (Token id:Id.Lit_Chars val:'\t(\n' span_id:533) (Token id:Id.Lit_Chars val:'\t\tcd non-bare &&\n' span_id:534) (Token id: Id.Lit_Chars val: '\t\ttest_commit one .mailmap "Fake Name <author@example.com>" &&\n' span_id: 535 ) (Token id:Id.Lit_Chars val:'\t\techo " 1\tFake Name" >expect &&\n' span_id:536) (Token id:Id.Lit_Chars val:'\t\tgit shortlog -ns HEAD >actual &&\n' span_id:537) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual &&\n' span_id:538) (Token id:Id.Lit_Chars val:'\t\trm .mailmap &&\n' span_id:539) (Token id:Id.Lit_Chars val:'\t\techo " 1\tA U Thor" >expect &&\n' span_id:540) (Token id:Id.Lit_Chars val:'\t\tgit shortlog -ns HEAD >actual &&\n' span_id:541) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:542) (Token id:Id.Lit_Chars val:'\t)\n' span_id:543) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'mailmap.blob defaults to HEAD:.mailmap in bare repo' span_id: 550 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:554) (Token id:Id.Lit_Chars val:'\tgit clone --bare non-bare bare &&\n' span_id:555) (Token id:Id.Lit_Chars val:'\t(\n' span_id:556) (Token id:Id.Lit_Chars val:'\t\tcd bare &&\n' span_id:557) (Token id:Id.Lit_Chars val:'\t\techo " 1\tFake Name" >expect &&\n' span_id:558) (Token id:Id.Lit_Chars val:'\t\tgit shortlog -ns HEAD >actual &&\n' span_id:559) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect actual\n' span_id:560) (Token id:Id.Lit_Chars val:'\t)\n' span_id:561) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'mailmap.blob can handle blobs without trailing newline' span_id: 568 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:572) (Token id:Id.Lit_Chars val:'\tcat >expect <<-\\EOF &&\n' span_id:573) (Token id:Id.Lit_Chars val:'\tTricky Guy (1):\n' span_id:574) (Token id:Id.Lit_Chars val:'\t initial\n' span_id:575) (Token id:Id.Lit_Chars val:'\n' span_id:576) (Token id:Id.Lit_Chars val:'\tnick1 (1):\n' span_id:577) (Token id:Id.Lit_Chars val:'\t second\n' span_id:578) (Token id:Id.Lit_Chars val:'\n' span_id:579) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:580) (Token id: Id.Lit_Chars val: '\tgit -c mailmap.blob=map:no-newline shortlog HEAD >actual &&\n' span_id: 581 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:582) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cleanup after mailmap.blob tests' span_id:589))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:593) (Token id:Id.Lit_Chars val:'\trm -f .mailmap\n' span_id:594) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'single-character name' span_id:601))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:605) (Token id: Id.Lit_Chars val: '\techo " 1\tA <author@example.com>" >expect &&\n' span_id: 606 ) (Token id:Id.Lit_Chars val:'\techo " 1\tnick1 <bugs@company.xx>" >>expect &&\n' span_id:607) (Token id: Id.Lit_Chars val: '\techo "A <author@example.com>" >.mailmap &&\n' span_id: 608 ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm .mailmap" &&\n' span_id:609) (Token id:Id.Lit_Chars val:'\tgit shortlog -es HEAD >actual &&\n' span_id:610) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:611) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'preserve canonical email case' span_id:618))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:622) (Token id: Id.Lit_Chars val: '\techo " 1\tA U Thor <AUTHOR@example.com>" >expect &&\n' span_id: 623 ) (Token id:Id.Lit_Chars val:'\techo " 1\tnick1 <bugs@company.xx>" >>expect &&\n' span_id:624) (Token id: Id.Lit_Chars val: '\techo "<AUTHOR@example.com> <author@example.com>" >.mailmap &&\n' span_id: 625 ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm .mailmap" &&\n' span_id:626) (Token id:Id.Lit_Chars val:'\tgit shortlog -es HEAD >actual &&\n' span_id:627) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:628) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:637) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:640) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:641)) (OF) } here_end_span_id: 661 stdin_parts: [ ('A U Thor <author@example.com> (1):\n') (' initial\n') ('\n') ('CTO <cto@company.xx> (1):\n') (' seventh\n') ('\n') ('Other Author <other@author.xx> (2):\n') (' third\n') (' fourth\n') ('\n') ('Santa Claus <santa.claus@northpole.xx> (2):\n') (' fifth\n') (' sixth\n') ('\n') ('Some Dude <some@dude.xx> (1):\n') (' second\n') ('\n') ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Shortlog output (complex mapping)' span_id:666))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:670) (Token id:Id.Lit_Chars val:'\techo three >>one &&\n' span_id:671) (Token id:Id.Lit_Chars val:'\tgit add one &&\n' span_id:672) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:673) (Token id: Id.Lit_Chars val: '\tgit commit --author "nick2 <bugs@company.xx>" -m third &&\n' span_id: 674 ) (Token id:Id.Lit_Chars val:'\n' span_id:675) (Token id:Id.Lit_Chars val:'\techo four >>one &&\n' span_id:676) (Token id:Id.Lit_Chars val:'\tgit add one &&\n' span_id:677) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:678) (Token id: Id.Lit_Chars val: '\tgit commit --author "nick2 <nick2@company.xx>" -m fourth &&\n' span_id: 679 ) (Token id:Id.Lit_Chars val:'\n' span_id:680) (Token id:Id.Lit_Chars val:'\techo five >>one &&\n' span_id:681) (Token id:Id.Lit_Chars val:'\tgit add one &&\n' span_id:682) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:683) (Token id:Id.Lit_Chars val:'\tgit commit --author "santa <me@company.xx>" -m fifth &&\n' span_id:684) (Token id:Id.Lit_Chars val:'\n' span_id:685) (Token id:Id.Lit_Chars val:'\techo six >>one &&\n' span_id:686) (Token id:Id.Lit_Chars val:'\tgit add one &&\n' span_id:687) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:688) (Token id: Id.Lit_Chars val: '\tgit commit --author "claus <me@company.xx>" -m sixth &&\n' span_id: 689 ) (Token id:Id.Lit_Chars val:'\n' span_id:690) (Token id:Id.Lit_Chars val:'\techo seven >>one &&\n' span_id:691) (Token id:Id.Lit_Chars val:'\tgit add one &&\n' span_id:692) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:693) (Token id: Id.Lit_Chars val: '\tgit commit --author "CTO <cto@coompany.xx>" -m seventh &&\n' span_id: 694 ) (Token id:Id.Lit_Chars val:'\n' span_id:695) (Token id:Id.Lit_Chars val:'\tmkdir -p internal_mailmap &&\n' span_id:696) (Token id: Id.Lit_Chars val: '\techo "Committed <committer@example.com>" > internal_mailmap/.mailmap &&\n' span_id: 697 ) (Token id: Id.Lit_Chars val: '\techo "<cto@company.xx> <cto@coompany.xx>" >> internal_mailmap/.mailmap &&\n' span_id: 698 ) (Token id: Id.Lit_Chars val: '\techo "Some Dude <some@dude.xx> nick1 <bugs@company.xx>" >> internal_mailmap/.mailmap &&\n' span_id: 699 ) (Token id: Id.Lit_Chars val: '\techo "Other Author <other@author.xx> nick2 <bugs@company.xx>" >> internal_mailmap/.mailmap &&\n' span_id: 700 ) (Token id: Id.Lit_Chars val: '\techo "Other Author <other@author.xx> <nick2@company.xx>" >> internal_mailmap/.mailmap &&\n' span_id: 701 ) (Token id: Id.Lit_Chars val: '\techo "Santa Claus <santa.claus@northpole.xx> <me@company.xx>" >> internal_mailmap/.mailmap &&\n' span_id: 702 ) (Token id: Id.Lit_Chars val: '\techo "Santa Claus <santa.claus@northpole.xx> <me@company.xx>" >> internal_mailmap/.mailmap &&\n' span_id: 703 ) (Token id:Id.Lit_Chars val:'\n' span_id:704) (Token id:Id.Lit_Chars val:'\tgit shortlog -e HEAD >actual &&\n' span_id:705) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:706) (Token id:Id.Lit_Chars val:'\n' span_id:707) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:716) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:719) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:720)) (OF) } here_end_span_id: 743 stdin_parts: [ ('Author CTO <cto@coompany.xx> maps to CTO <cto@company.xx>\n') ( 'Committer C O Mitter <committer@example.com> maps to Committed <committer@example.com>\n' ) ('\n') ('Author claus <me@company.xx> maps to Santa Claus <santa.claus@northpole.xx>\n') ( 'Committer C O Mitter <committer@example.com> maps to Committed <committer@example.com>\n' ) ('\n') ('Author santa <me@company.xx> maps to Santa Claus <santa.claus@northpole.xx>\n') ( 'Committer C O Mitter <committer@example.com> maps to Committed <committer@example.com>\n' ) ('\n') ('Author nick2 <nick2@company.xx> maps to Other Author <other@author.xx>\n') ( 'Committer C O Mitter <committer@example.com> maps to Committed <committer@example.com>\n' ) ('\n') ('Author nick2 <bugs@company.xx> maps to Other Author <other@author.xx>\n') ( 'Committer C O Mitter <committer@example.com> maps to Committed <committer@example.com>\n' ) ('\n') ('Author nick1 <bugs@company.xx> maps to Some Dude <some@dude.xx>\n') ( 'Committer C O Mitter <committer@example.com> maps to Committed <committer@example.com>\n' ) ('\n') ('Author A U Thor <author@example.com> maps to A U Thor <author@example.com>\n') ( 'Committer C O Mitter <committer@example.com> maps to Committed <committer@example.com>\n' ) ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Log output (complex mapping)' span_id:748))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:752) (Token id: Id.Lit_Chars val: '\tgit log --pretty=format:"Author %an <%ae> maps to %aN <%aE>%nCommitter %cn <%ce> maps to %cN <%cE>%n" >actual &&\n' span_id: 753 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:754) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:760) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:763) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:764)) (OF) } here_end_span_id: 774 stdin_parts: [ ('Author: CTO <cto@company.xx>\n') ('Author: Santa Claus <santa.claus@northpole.xx>\n') ('Author: Santa Claus <santa.claus@northpole.xx>\n') ('Author: Other Author <other@author.xx>\n') ('Author: Other Author <other@author.xx>\n') ('Author: Some Dude <some@dude.xx>\n') ('Author: A U Thor <author@example.com>\n') ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Log output with --use-mailmap' span_id:779))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:783) (Token id: Id.Lit_Chars val: '\tgit log --use-mailmap | grep Author >actual &&\n' span_id: 784 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:785) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:791) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:794) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:795)) (OF) } here_end_span_id: 805 stdin_parts: [ ('Author: CTO <cto@company.xx>\n') ('Author: Santa Claus <santa.claus@northpole.xx>\n') ('Author: Santa Claus <santa.claus@northpole.xx>\n') ('Author: Other Author <other@author.xx>\n') ('Author: Other Author <other@author.xx>\n') ('Author: Some Dude <some@dude.xx>\n') ('Author: A U Thor <author@example.com>\n') ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Log output with log.mailmap' span_id:810))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:814) (Token id: Id.Lit_Chars val: '\tgit -c log.mailmap=True log | grep Author >actual &&\n' span_id: 815 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:816) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:822) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:825) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:826)) (OF) } here_end_span_id: 831 stdin_parts: [ ('Author: Santa Claus <santa.claus@northpole.xx>\n') ('Author: Santa Claus <santa.claus@northpole.xx>\n') ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Grep author with --use-mailmap' span_id:836))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:840) (Token id: Id.Lit_Chars val: '\tgit log --use-mailmap --author Santa | grep Author >actual &&\n' span_id: 841 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:842) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:847) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:850) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:851)) (OF) } here_end_span_id: 856 stdin_parts: [ ('Author: Santa Claus <santa.claus@northpole.xx>\n') ('Author: Santa Claus <santa.claus@northpole.xx>\n') ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Grep author with log.mailmap' span_id:861))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:865) (Token id: Id.Lit_Chars val: '\tgit -c log.mailmap=True log --author Santa | grep Author >actual &&\n' span_id: 866 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:867) ) } ) (command.Simple redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:871) fd: -1 arg_word: {(expect)} ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Only grep replaced author with --use-mailmap' span_id:878))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:882) (Token id: Id.Lit_Chars val: '\tgit log --use-mailmap --author "<cto@coompany.xx>" >actual &&\n' span_id: 883 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:884) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:893) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:896) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:897)) (OF) } here_end_span_id: 907 stdin_parts: [ ('^OBJI (A U Thor DATE 1) one\n') ('OBJID (Some Dude DATE 2) two\n') ('OBJID (Other Author DATE 3) three\n') ('OBJID (Other Author DATE 4) four\n') ('OBJID (Santa Claus DATE 5) five\n') ('OBJID (Santa Claus DATE 6) six\n') ('OBJID (CTO DATE 7) seven\n') ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Blame output (complex mapping)' span_id:911))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:915) (Token id:Id.Lit_Chars val:'\tgit blame one >actual &&\n' span_id:916) (Token id:Id.Lit_Chars val:'\tfuzz_blame actual >actual.fuzz &&\n' span_id:917) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual.fuzz\n' span_id:918) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:924) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:927) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:928)) (OF) } here_end_span_id: 932 stdin_parts: [('Some Dude <some@dude.xx>\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit --author honors mailmap' span_id:937))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:941) (Token id: Id.Lit_Chars val: '\ttest_must_fail git commit --author "nick" --allow-empty -meight &&\n' span_id: 942 ) (Token id: Id.Lit_Chars val: '\tgit commit --author "Some Dude" --allow-empty -meight &&\n' span_id: 943 ) (Token id:Id.Lit_Chars val:'\tgit show --pretty=format:"%an <%ae>%n" >actual &&\n' span_id:944) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:945) ) } ) (C {(test_done)}) ] )