(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)})
  ]
)