(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:'git merge\n' span_id:15) 
                (Token id:Id.Lit_Chars val:'\n' span_id:16) (Token id:Id.Lit_Chars val:'Testing basic merge operations/option parsing.\n' span_id:17) 
                (Token id:Id.Lit_Chars val:'\n' span_id:18) (Token id:Id.Lit_Chars val:'! [c0] commit 0\n' span_id:19) 
                (Token id:Id.Lit_Chars val:' ! [c1] commit 1\n' span_id:20) (Token id:Id.Lit_Chars val:'  ! [c2] commit 2\n' span_id:21) 
                (Token id:Id.Lit_Chars val:'   ! [c3] commit 3\n' span_id:22) (Token id:Id.Lit_Chars val:'    ! [c4] c4\n' span_id:23) 
                (Token id:Id.Lit_Chars val:'     ! [c5] c5\n' span_id:24) (Token id:Id.Lit_Chars val:'      ! [c6] c6\n' span_id:25) 
                (Token
                  id: Id.Lit_Chars
                  val: '       * [master] Merge commit '
                  span_id: 26
                )
              ) (c1) 
              (SQ (Token id:Id.Lit_Chars val:'\n' span_id:30) 
                (Token id:Id.Lit_Chars val:'--------\n' span_id:31) (Token id:Id.Lit_Chars val:'       - [master] Merge commit ' span_id:32)
              ) (c1) 
              (SQ (Token id:Id.Lit_Chars val:'\n' span_id:36) 
                (Token id:Id.Lit_Chars val:' +     * [c1] commit 1\n' span_id:37) (Token id:Id.Lit_Chars val:'      +  [c6] c6\n' span_id:38) 
                (Token id:Id.Lit_Chars val:'     +   [c5] c5\n' span_id:39) (Token id:Id.Lit_Chars val:'    ++   [c4] c4\n' span_id:40) 
                (Token id:Id.Lit_Chars val:'   ++++  [c3] commit 3\n' span_id:41) (Token id:Id.Lit_Chars val:'  +      [c2] commit 2\n' span_id:42) 
                (Token id:Id.Lit_Chars val:'+++++++* [c0] commit 0\n' span_id:43)
              )
            }
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/lib-gpg.sh)})
    (command.Simple
      words: [
        {(printf)}
        {(SQ (Token id:Id.Lit_Chars val:'%s\\n' span_id:62))}
        {(1)}
        {(2)}
        {(3)}
        {(4)}
        {(5)}
        {(6)}
        {(7)}
        {(8)}
        {(9)}
      ]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:83) fd:-1 arg_word:{(file)})]
    )
    (command.Simple
      words: [
        {(printf)}
        {(SQ (Token id:Id.Lit_Chars val:'%s\\n' span_id:89))}
        {(SQ (Token id:Id.Lit_Chars val:'1 X' span_id:93))}
        {(2)}
        {(3)}
        {(4)}
        {(5)}
        {(6)}
        {(7)}
        {(8)}
        {(9)}
      ]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:112)
          fd: -1
          arg_word: {(file.1)}
        )
      ]
    )
    (command.Simple
      words: [
        {(printf)}
        {(SQ (Token id:Id.Lit_Chars val:'%s\\n' span_id:118))}
        {(1)}
        {(2)}
        {(3)}
        {(4)}
        {(SQ (Token id:Id.Lit_Chars val:'5 X' span_id:130))}
        {(6)}
        {(7)}
        {(8)}
        {(9)}
      ]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:141)
          fd: -1
          arg_word: {(file.5)}
        )
      ]
    )
    (command.Simple
      words: [
        {(printf)}
        {(SQ (Token id:Id.Lit_Chars val:'%s\\n' span_id:147))}
        {(1)}
        {(2)}
        {(3)}
        {(4)}
        {(5)}
        {(6)}
        {(7)}
        {(8)}
        {(SQ (Token id:Id.Lit_Chars val:'9 X' span_id:167))}
      ]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:170)
          fd: -1
          arg_word: {(file.9)}
        )
      ]
    )
    (command.Simple
      words: [
        {(printf)}
        {(SQ (Token id:Id.Lit_Chars val:'%s\\n' span_id:176))}
        {(1)}
        {(2)}
        {(3)}
        {(4)}
        {(5)}
        {(6)}
        {(7)}
        {(8)}
        {(SQ (Token id:Id.Lit_Chars val:'9 Y' span_id:196))}
      ]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:199)
          fd: -1
          arg_word: {(file.9y)}
        )
      ]
    )
    (command.Simple
      words: [
        {(printf)}
        {(SQ (Token id:Id.Lit_Chars val:'%s\\n' span_id:205))}
        {(SQ (Token id:Id.Lit_Chars val:'1 X' span_id:209))}
        {(2)}
        {(3)}
        {(4)}
        {(5)}
        {(6)}
        {(7)}
        {(8)}
        {(9)}
      ]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:228)
          fd: -1
          arg_word: {(result.1)}
        )
      ]
    )
    (command.Simple
      words: [
        {(printf)}
        {(SQ (Token id:Id.Lit_Chars val:'%s\\n' span_id:234))}
        {(SQ (Token id:Id.Lit_Chars val:'1 X' span_id:238))}
        {(2)}
        {(3)}
        {(4)}
        {(SQ (Token id:Id.Lit_Chars val:'5 X' span_id:248))}
        {(6)}
        {(7)}
        {(8)}
        {(9)}
      ]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:259)
          fd: -1
          arg_word: {(result.1-5)}
        )
      ]
    )
    (command.Simple
      words: [
        {(printf)}
        {(SQ (Token id:Id.Lit_Chars val:'%s\\n' span_id:265))}
        {(SQ (Token id:Id.Lit_Chars val:'1 X' span_id:269))}
        {(2)}
        {(3)}
        {(4)}
        {(SQ (Token id:Id.Lit_Chars val:'5 X' span_id:279))}
        {(6)}
        {(7)}
        {(8)}
        {(SQ (Token id:Id.Lit_Chars val:'9 X' span_id:289))}
      ]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:292)
          fd: -1
          arg_word: {(result.1-5-9)}
        )
      ]
    )
    (command.Simple
      words: [
        {(printf)}
        {(SQ (Token id:Id.Lit_Chars val:'%s\\n' span_id:298))}
        {(1)}
        {(2)}
        {(3)}
        {(4)}
        {(5)}
        {(6)}
        {(7)}
        {(8)}
        {(SQ (Token id:Id.Lit_Chars val:'9 Z' span_id:318))}
      ]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:321)
          fd: -1
          arg_word: {(result.9z)}
        )
      ]
    )
    (command.Simple
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:324) fd:-1 arg_word:{(empty)})
      ]
    )
    (command.ShFunction
      name: create_merge_msgs
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [{(echo)} {(DQ ("Merge tag 'c2'"))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:342)
                      fd: -1
                      arg_word: {(msg.1-5)}
                    )
                  ]
                )
                (command.Simple
                  words: [{(echo)} {(DQ ("Merge tags 'c2' and 'c3'"))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:354)
                      fd: -1
                      arg_word: {(msg.1-5-9)}
                    )
                  ]
                )
                (command.BraceGroup
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DAmp Id.Op_DAmp]
                      children: [
                        (C {(echo)} {(DQ ('Squashed commit of the following:'))})
                        (C {(echo)})
                        (C {(git)} {(log)} {(--no-merges)} {(Id.Lit_Other '^') (HEAD)} {(c1)})
                      ]
                    )
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:391)
                      fd: -1
                      arg_word: {(squash.1)}
                    )
                  ]
                )
                (command.BraceGroup
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DAmp Id.Op_DAmp]
                      children: [
                        (C {(echo)} {(DQ ('Squashed commit of the following:'))})
                        (C {(echo)})
                        (C {(git)} {(log)} {(--no-merges)} {(Id.Lit_Other '^') (HEAD)} {(c2)})
                      ]
                    )
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:428)
                      fd: -1
                      arg_word: {(squash.1-5)}
                    )
                  ]
                )
                (command.BraceGroup
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DAmp Id.Op_DAmp]
                      children: [
                        (C {(echo)} {(DQ ('Squashed commit of the following:'))})
                        (C {(echo)})
                        (C {(git)} {(log)} {(--no-merges)} {(Id.Lit_Other '^') (HEAD)} {(c2)} {(c3)})
                      ]
                    )
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:467)
                      fd: -1
                      arg_word: {(squash.1-5-9)}
                    )
                  ]
                )
                (command.Simple
                  words: [{(Id.Lit_Other ':')}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:475)
                      fd: -1
                      arg_word: {(msg.nologff)}
                    )
                  ]
                )
                (command.Simple
                  words: [{(Id.Lit_Other ':')}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:483)
                      fd: -1
                      arg_word: {(msg.nolognoff)}
                    )
                  ]
                )
                (command.BraceGroup
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [(C {(echo)} {(DQ ("* tag 'c3':"))}) (C {(echo)} {(DQ ('  commit 3'))})]
                    )
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:510)
                      fd: -1
                      arg_word: {(msg.log)}
                    )
                  ]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: verify_merge
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {(test_cmp)} {(DQ ($ Id.VSub_Number '$2'))} {(DQ ($ Id.VSub_Number '$1'))})
                (C {(git)} {(update-index)} {(--refresh)})
                (C {(git)} {(diff)} {(--exit-code)})
                (command.If
                  arms: [
                    (if_arm
                      cond: [(C {(test)} {(-n)} {(DQ ($ Id.VSub_Number '$3'))})]
                      action: [
                        (command.AndOr
                          ops: [Id.Op_DAmp]
                          children: [
                            (command.Simple
                              words: [
                                {(git)}
                                {(show)}
                                {(-s)}
                                {(--pretty) (Id.Lit_Equals '=') (tformat) (Id.Lit_Other ':') 
                                  (Id.Lit_Other '%') (s)
                                }
                                {(HEAD)}
                              ]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_Great val:'>' span_id:584)
                                  fd: -1
                                  arg_word: {(msg.act)}
                                )
                              ]
                            )
                            (C {(test_cmp)} {(DQ ($ Id.VSub_Number '$3'))} {(msg.act)})
                          ]
                        )
                      ]
                      spids: [555 566]
                    )
                  ]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: verify_head
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [{(echo)} {(DQ ($ Id.VSub_Number '$1'))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:618)
                      fd: -1
                      arg_word: {(head.expected)}
                    )
                  ]
                )
                (command.Simple
                  words: [{(git)} {(rev-parse)} {(HEAD)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:630)
                      fd: -1
                      arg_word: {(head.actual)}
                    )
                  ]
                )
                (C {(test_cmp)} {(head.expected)} {(head.actual)})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: verify_parents
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [
                    {(printf)}
                    {(SQ (Token id:Id.Lit_Chars val:'%s\\n' span_id:656))}
                    {(DQ ($ Id.VSub_At '$@'))}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:663)
                      fd: -1
                      arg_word: {(parents.expected)}
                    )
                  ]
                )
                (command.Simple
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:669)
                      fd: -1
                      arg_word: {(parents.actual)}
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:i)
                      op: assign_op.Equal
                      rhs: {(1)}
                      spids: [675]
                    )
                  ]
                )
                (command.WhileUntil
                  keyword: (Token id:Id.KW_While val:while span_id:681)
                  cond: [(C {(test)} {($ Id.VSub_DollarName '$i')} {(-le)} {($ Id.VSub_Pound '$#')})]
                  body: 
                    (command.DoGroup
                      children: [
                        (command.AndOr
                          ops: [Id.Op_DAmp Id.Op_DPipe]
                          children: [
                            (command.Simple
                              words: [
                                {(git)}
                                {(rev-parse)}
                                {(HEAD) (Id.Lit_Other '^') ($ Id.VSub_DollarName '$i')}
                              ]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_DGreat val:'>>' span_id:703)
                                  fd: -1
                                  arg_word: {(parents.actual)}
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:i)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (command_sub
                                        left_token: 
                                          (Token
                                            id: Id.Left_DollarParen
                                            val: '$('
                                            span_id: 710
                                          )
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (C {(expr)} {($ Id.VSub_DollarName '$i')} 
                                                {(Id.Lit_Other '+')} {(1)}
                                              )
                                            ]
                                          )
                                      )
                                    }
                                  spids: [709]
                                )
                              ]
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:723)
                              arg_word: {(1)}
                            )
                          ]
                        )
                      ]
                    )
                )
                (C {(test_must_fail)} {(git)} {(rev-parse)} {(--verify)} 
                  {(DQ ('HEAD^') ($ Id.VSub_DollarName '$i'))}
                )
                (C {(test_cmp)} {(parents.expected)} {(parents.actual)})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: verify_mergeheads
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [
                    {(printf)}
                    {(SQ (Token id:Id.Lit_Chars val:'%s\\n' span_id:769))}
                    {(DQ ($ Id.VSub_At '$@'))}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:776)
                      fd: -1
                      arg_word: {(mergehead.expected)}
                    )
                  ]
                )
                (command.WhileUntil
                  keyword: (Token id:Id.KW_While val:while span_id:782)
                  cond: [(C {(read)} {(sha1)} {(rest)})]
                  body: 
                    (command.DoGroup
                      children: [(C {(git)} {(rev-parse)} {($ Id.VSub_DollarName '$sha1')})]
                    )
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:803)
                      fd: -1
                      arg_word: {(.git/MERGE_HEAD)}
                    )
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:806)
                      fd: -1
                      arg_word: {(mergehead.actual)}
                    )
                  ]
                )
                (C {(test_cmp)} {(mergehead.expected)} {(mergehead.actual)})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: verify_no_mergehead
      body: 
        (command.BraceGroup
          children: [(command.Pipeline children:[(C {(test)} {(-e)} {(.git/MERGE_HEAD)})] negated:T)]
        )
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:843))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:847) 
          (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:848) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:849) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "commit 0" &&\n' span_id:850) (Token id:Id.Lit_Chars val:'\tgit tag c0 &&\n' span_id:851) 
          (Token id:Id.Lit_Chars val:'\tc0=$(git rev-parse HEAD) &&\n' span_id:852) (Token id:Id.Lit_Chars val:'\tcp file.1 file &&\n' span_id:853) 
          (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:854) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:855) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "commit 1" &&\n' span_id:856) (Token id:Id.Lit_Chars val:'\tgit tag c1 &&\n' span_id:857) 
          (Token id:Id.Lit_Chars val:'\tc1=$(git rev-parse HEAD) &&\n' span_id:858) (Token id:Id.Lit_Chars val:'\tgit reset --hard "$c0" &&\n' span_id:859) 
          (Token id:Id.Lit_Chars val:'\tcp file.5 file &&\n' span_id:860) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:861) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:862) (Token id:Id.Lit_Chars val:'\tgit commit -m "commit 2" &&\n' span_id:863) 
          (Token id:Id.Lit_Chars val:'\tgit tag c2 &&\n' span_id:864) (Token id:Id.Lit_Chars val:'\tc2=$(git rev-parse HEAD) &&\n' span_id:865) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard "$c0" &&\n' span_id:866) (Token id:Id.Lit_Chars val:'\tcp file.9y file &&\n' span_id:867) 
          (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:868) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:869) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "commit 7" &&\n' span_id:870) (Token id:Id.Lit_Chars val:'\tgit tag c7 &&\n' span_id:871) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard "$c0" &&\n' span_id:872) (Token id:Id.Lit_Chars val:'\tcp file.9 file &&\n' span_id:873) 
          (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:874) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:875) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "commit 3" &&\n' span_id:876) (Token id:Id.Lit_Chars val:'\tgit tag c3 &&\n' span_id:877) 
          (Token id:Id.Lit_Chars val:'\tc3=$(git rev-parse HEAD) &&\n' span_id:878) (Token id:Id.Lit_Chars val:'\tgit reset --hard "$c0" &&\n' span_id:879) 
          (Token id:Id.Lit_Chars val:'\tcreate_merge_msgs\n' span_id:880)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:887))}
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'test option parsing' span_id:894))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:898) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge -$ c1 &&\n' span_id:899) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge --no-such c1 &&\n' span_id:900) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git merge -s foobar c1 &&\n'
            span_id: 901
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge -s=foobar c1 &&\n' span_id:902) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge -m &&\n' span_id:903) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge\n' span_id:904)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge -h with invalid index' span_id:911))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:915) 
          (Token id:Id.Lit_Chars val:'\tmkdir broken &&\n' span_id:916) (Token id:Id.Lit_Chars val:'\t(\n' span_id:917) 
          (Token id:Id.Lit_Chars val:'\t\tcd broken &&\n' span_id:918) (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:919) 
          (Token id:Id.Lit_Chars val:'\t\t>.git/index &&\n' span_id:920) (Token id:Id.Lit_Chars val:'\t\ttest_expect_code 129 git merge -h 2>usage\n' span_id:921) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:922) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "[Uu]sage: git merge" broken/usage\n' span_id:923)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'reject non-strategy with a git-merge-foo name' span_id:930))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:934) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git merge -s index c1\n'
            span_id: 935
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge c0 with c1' span_id:942))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:946) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "OBJID HEAD@{0}: merge c1: Fast-forward" >reflog.expected &&\n'
            span_id: 947
          ) (Token id:Id.Lit_Chars val:'\n' span_id:948) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:949) (Token id:Id.Lit_Chars val:'\tgit merge c1 &&\n' span_id:950) 
          (Token id:Id.Lit_Chars val:'\tverify_merge file result.1 &&\n' span_id:951) (Token id:Id.Lit_Chars val:'\tverify_head "$c1" &&\n' span_id:952) 
          (Token id:Id.Lit_Chars val:'\n' span_id:953) (Token id:Id.Lit_Chars val:'\tgit reflog -1 >reflog.actual &&\n' span_id:954) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed "s/$_x05[0-9a-f]*/OBJID/g" reflog.actual >reflog.fuzzy &&\n'
            span_id: 955
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp reflog.expected reflog.fuzzy\n' span_id:956)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:963))}
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge c0 with c1 with --ff-only' span_id:970))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:974) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:975) (Token id:Id.Lit_Chars val:'\tgit merge --ff-only c1 &&\n' span_id:976) 
          (Token id:Id.Lit_Chars val:'\tgit merge --ff-only HEAD c0 c1 &&\n' span_id:977) (Token id:Id.Lit_Chars val:'\tverify_merge file result.1 &&\n' span_id:978) 
          (Token id:Id.Lit_Chars val:'\tverify_head "$c1"\n' span_id:979)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:986))}
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge from unborn branch' span_id:993))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:997) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -f master &&\n' span_id:998) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D kid &&\n' span_id:999) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1000) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "OBJID HEAD@{0}: initial pull" >reflog.expected &&\n'
            span_id: 1001
          ) (Token id:Id.Lit_Chars val:'\n' span_id:1002) 
          (Token id:Id.Lit_Chars val:'\tgit checkout --orphan kid &&\n' span_id:1003) (Token id:Id.Lit_Chars val:'\ttest_when_finished "git checkout -f master" &&\n' span_id:1004) 
          (Token id:Id.Lit_Chars val:'\tgit rm -fr . &&\n' span_id:1005) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1006) 
          (Token id:Id.Lit_Chars val:'\tgit merge --ff-only c1 &&\n' span_id:1007) (Token id:Id.Lit_Chars val:'\tverify_merge file result.1 &&\n' span_id:1008) 
          (Token id:Id.Lit_Chars val:'\tverify_head "$c1" &&\n' span_id:1009) (Token id:Id.Lit_Chars val:'\n' span_id:1010) 
          (Token id:Id.Lit_Chars val:'\tgit reflog -1 >reflog.actual &&\n' span_id:1011) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed "s/$_x05[0-9a-f][0-9a-f]/OBJID/g" reflog.actual >reflog.fuzzy &&\n'
            span_id: 1012
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp reflog.expected reflog.fuzzy\n' span_id:1013)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1020))}
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge c1 with c2' span_id:1027))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1031) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:1032) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1033) 
          (Token id:Id.Lit_Chars val:'\tgit merge c2 &&\n' span_id:1034) (Token id:Id.Lit_Chars val:'\tverify_merge file result.1-5 msg.1-5 &&\n' span_id:1035) 
          (Token id:Id.Lit_Chars val:'\tverify_parents $c1 $c2\n' span_id:1036)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge --squash c3 with c7' span_id:1043))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1047) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c3 &&\n' span_id:1048) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge --squash c7 &&\n' span_id:1049) 
          (Token id:Id.Lit_Chars val:'\tcat result.9z >file &&\n' span_id:1050) (Token id:Id.Lit_Chars val:'\tgit commit --no-edit -a &&\n' span_id:1051) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1052) (Token id:Id.Lit_Chars val:'\t{\n' span_id:1053) 
          (Token id:Id.Lit_Chars val:'\t\tcat <<-EOF\n' span_id:1054) (Token id:Id.Lit_Chars val:'\t\tSquashed commit of the following:\n' span_id:1055) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1056) (Token id:Id.Lit_Chars val:'\t\t$(git show -s c7)\n' span_id:1057) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1058) (Token id:Id.Lit_Chars val:'\t\t# Conflicts:\n' span_id:1059) 
          (Token id:Id.Lit_Chars val:'\t\t#\tfile\n' span_id:1060) (Token id:Id.Lit_Chars val:'\t\tEOF\n' span_id:1061) 
          (Token id:Id.Lit_Chars val:'\t} >expect &&\n' span_id:1062) (Token id:Id.Lit_Chars val:'\tgit cat-file commit HEAD | sed -e ' span_id:1063)
        ) (1) (Id.Lit_Comma ',') (/) (Id.Lit_Other '^') (Id.Lit_Other '$') (/d) 
        (SQ (Token id:Id.Lit_Chars val:' >actual &&\n' span_id:1072) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1073)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1080))}
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge c1 with c2 and c3' span_id:1087))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1091) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:1092) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1093) 
          (Token id:Id.Lit_Chars val:'\tgit merge c2 c3 &&\n' span_id:1094) (Token id:Id.Lit_Chars val:'\tverify_merge file result.1-5-9 msg.1-5-9 &&\n' span_id:1095) 
          (Token id:Id.Lit_Chars val:'\tverify_parents $c1 $c2 $c3\n' span_id:1096)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1103))}
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merges with --ff-only' span_id:1110))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1114) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:1115) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1116) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git merge --ff-only c2 &&\n'
            span_id: 1117
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge --ff-only c3 &&\n' span_id:1118) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git merge --ff-only c2 c3 &&\n'
            span_id: 1119
          ) (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:1120) 
          (Token id:Id.Lit_Chars val:'\tgit merge c3 &&\n' span_id:1121) (Token id:Id.Lit_Chars val:'\tverify_head $c3\n' span_id:1122)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merges with merge.ff=only' span_id:1129))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1133) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:1134) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1135) 
          (Token id:Id.Lit_Chars val:'\ttest_config merge.ff "only" &&\n' span_id:1136) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge c2 &&\n' span_id:1137) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge c3 &&\n' span_id:1138) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge c2 c3 &&\n' span_id:1139) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:1140) (Token id:Id.Lit_Chars val:'\tgit merge c3 &&\n' span_id:1141) 
          (Token id:Id.Lit_Chars val:'\tverify_head $c3\n' span_id:1142)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge c0 with c1 (no-commit)' span_id:1149))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1153) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:1154) (Token id:Id.Lit_Chars val:'\tgit merge --no-commit c1 &&\n' span_id:1155) 
          (Token id:Id.Lit_Chars val:'\tverify_merge file result.1 &&\n' span_id:1156) (Token id:Id.Lit_Chars val:'\tverify_head $c1\n' span_id:1157)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1164))}
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge c1 with c2 (no-commit)' span_id:1171))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1175) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:1176) (Token id:Id.Lit_Chars val:'\tgit merge --no-commit c2 &&\n' span_id:1177) 
          (Token id:Id.Lit_Chars val:'\tverify_merge file result.1-5 &&\n' span_id:1178) (Token id:Id.Lit_Chars val:'\tverify_head $c1 &&\n' span_id:1179) 
          (Token id:Id.Lit_Chars val:'\tverify_mergeheads $c2\n' span_id:1180)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1187))}
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge c1 with c2 and c3 (no-commit)' span_id:1194))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1198) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:1199) (Token id:Id.Lit_Chars val:'\tgit merge --no-commit c2 c3 &&\n' span_id:1200) 
          (Token id:Id.Lit_Chars val:'\tverify_merge file result.1-5-9 &&\n' span_id:1201) (Token id:Id.Lit_Chars val:'\tverify_head $c1 &&\n' span_id:1202) 
          (Token id:Id.Lit_Chars val:'\tverify_mergeheads $c2 $c3\n' span_id:1203)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1210))}
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge c0 with c1 (squash)' span_id:1217))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1221) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:1222) (Token id:Id.Lit_Chars val:'\tgit merge --squash c1 &&\n' span_id:1223) 
          (Token id:Id.Lit_Chars val:'\tverify_merge file result.1 &&\n' span_id:1224) (Token id:Id.Lit_Chars val:'\tverify_head $c0 &&\n' span_id:1225) 
          (Token id:Id.Lit_Chars val:'\tverify_no_mergehead &&\n' span_id:1226) (Token id:Id.Lit_Chars val:'\ttest_cmp squash.1 .git/SQUASH_MSG\n' span_id:1227)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1234))}
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge c0 with c1 (squash, ff-only)' span_id:1241))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1245) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:1246) (Token id:Id.Lit_Chars val:'\tgit merge --squash --ff-only c1 &&\n' span_id:1247) 
          (Token id:Id.Lit_Chars val:'\tverify_merge file result.1 &&\n' span_id:1248) (Token id:Id.Lit_Chars val:'\tverify_head $c0 &&\n' span_id:1249) 
          (Token id:Id.Lit_Chars val:'\tverify_no_mergehead &&\n' span_id:1250) (Token id:Id.Lit_Chars val:'\ttest_cmp squash.1 .git/SQUASH_MSG\n' span_id:1251)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1258))}
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge c1 with c2 (squash)' span_id:1265))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1269) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:1270) (Token id:Id.Lit_Chars val:'\tgit merge --squash c2 &&\n' span_id:1271) 
          (Token id:Id.Lit_Chars val:'\tverify_merge file result.1-5 &&\n' span_id:1272) (Token id:Id.Lit_Chars val:'\tverify_head $c1 &&\n' span_id:1273) 
          (Token id:Id.Lit_Chars val:'\tverify_no_mergehead &&\n' span_id:1274) (Token id:Id.Lit_Chars val:'\ttest_cmp squash.1-5 .git/SQUASH_MSG\n' span_id:1275)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1282))}
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'unsuccessful merge of c1 with c2 (squash, ff-only)'
            span_id: 1289
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1293) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:1294) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge --squash --ff-only c2\n' span_id:1295)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1302))}
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge c1 with c2 and c3 (squash)' span_id:1309))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1313) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:1314) (Token id:Id.Lit_Chars val:'\tgit merge --squash c2 c3 &&\n' span_id:1315) 
          (Token id:Id.Lit_Chars val:'\tverify_merge file result.1-5-9 &&\n' span_id:1316) (Token id:Id.Lit_Chars val:'\tverify_head $c1 &&\n' span_id:1317) 
          (Token id:Id.Lit_Chars val:'\tverify_no_mergehead &&\n' span_id:1318) (Token id:Id.Lit_Chars val:'\ttest_cmp squash.1-5-9 .git/SQUASH_MSG\n' span_id:1319)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1326))}
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge c1 with c2 (no-commit in config)' span_id:1333))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1337) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:1338) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config branch.master.mergeoptions "--no-commit" &&\n'
            span_id: 1339
          ) (Token id:Id.Lit_Chars val:'\tgit merge c2 &&\n' span_id:1340) 
          (Token id:Id.Lit_Chars val:'\tverify_merge file result.1-5 &&\n' span_id:1341) (Token id:Id.Lit_Chars val:'\tverify_head $c1 &&\n' span_id:1342) 
          (Token id:Id.Lit_Chars val:'\tverify_mergeheads $c2\n' span_id:1343)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1350))}
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge c1 with c2 (log in config)' span_id:1357))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1361) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:1362) (Token id:Id.Lit_Chars val:'\tgit merge --log c2 &&\n' span_id:1363) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit show -s --pretty=tformat:%s%n%b >expect &&\n'
            span_id: 1364
          ) (Token id:Id.Lit_Chars val:'\n' span_id:1365) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config branch.master.mergeoptions "--log" &&\n'
            span_id: 1366
          ) (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:1367) 
          (Token id:Id.Lit_Chars val:'\tgit merge c2 &&\n' span_id:1368) (Token id:Id.Lit_Chars val:'\tgit show -s --pretty=tformat:%s%n%b >actual &&\n' span_id:1369) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1370) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1371)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'merge c1 with c2 (log in config gets overridden)'
            span_id: 1378
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1382) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:1383) (Token id:Id.Lit_Chars val:'\tgit merge c2 &&\n' span_id:1384) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit show -s --pretty=tformat:%s%n%b >expect &&\n'
            span_id: 1385
          ) (Token id:Id.Lit_Chars val:'\n' span_id:1386) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config branch.master.mergeoptions "--no-log" &&\n'
            span_id: 1387
          ) (Token id:Id.Lit_Chars val:'\ttest_config merge.log "true" &&\n' span_id:1388) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:1389) (Token id:Id.Lit_Chars val:'\tgit merge c2 &&\n' span_id:1390) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit show -s --pretty=tformat:%s%n%b >actual &&\n'
            span_id: 1391
          ) (Token id:Id.Lit_Chars val:'\n' span_id:1392) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1393)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge c1 with c2 (squash in config)' span_id:1400))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1404) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:1405) (Token id:Id.Lit_Chars val:'\ttest_config branch.master.mergeoptions "--squash" &&\n' span_id:1406) 
          (Token id:Id.Lit_Chars val:'\tgit merge c2 &&\n' span_id:1407) (Token id:Id.Lit_Chars val:'\tverify_merge file result.1-5 &&\n' span_id:1408) 
          (Token id:Id.Lit_Chars val:'\tverify_head $c1 &&\n' span_id:1409) (Token id:Id.Lit_Chars val:'\tverify_no_mergehead &&\n' span_id:1410) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_cmp squash.1-5 .git/SQUASH_MSG\n'
            span_id: 1411
          )
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1418))}
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'override config option -n with --summary' span_id:1425))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1429) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:1430) (Token id:Id.Lit_Chars val:'\ttest_config branch.master.mergeoptions "-n" &&\n' span_id:1431) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1432) (Token id:Id.Lit_Chars val:'\tgit merge --summary c2 >diffstat.txt &&\n' span_id:1433) 
          (Token
            id: Id.Lit_Chars
            val: '\tverify_merge file result.1-5 msg.1-5 &&\n'
            span_id: 1434
          ) (Token id:Id.Lit_Chars val:'\tverify_parents $c1 $c2 &&\n' span_id:1435) 
          (Token
            id: Id.Lit_Chars
            val: '\tif ! grep "^ file |  *2 +-$" diffstat.txt\n'
            span_id: 1436
          ) (Token id:Id.Lit_Chars val:'\tthen\n' span_id:1437) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "[OOPS] diffstat was not generated with --summary"\n'
            span_id: 1438
          ) (Token id:Id.Lit_Chars val:'\t\tfalse\n' span_id:1439) 
          (Token id:Id.Lit_Chars val:'\tfi\n' span_id:1440)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'override config option -n with --stat' span_id:1447))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1451) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:1452) (Token id:Id.Lit_Chars val:'\ttest_config branch.master.mergeoptions "-n" &&\n' span_id:1453) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1454) (Token id:Id.Lit_Chars val:'\tgit merge --stat c2 >diffstat.txt &&\n' span_id:1455) 
          (Token
            id: Id.Lit_Chars
            val: '\tverify_merge file result.1-5 msg.1-5 &&\n'
            span_id: 1456
          ) (Token id:Id.Lit_Chars val:'\tverify_parents $c1 $c2 &&\n' span_id:1457) 
          (Token
            id: Id.Lit_Chars
            val: '\tif ! grep "^ file |  *2 +-$" diffstat.txt\n'
            span_id: 1458
          ) (Token id:Id.Lit_Chars val:'\tthen\n' span_id:1459) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "[OOPS] diffstat was not generated with --stat"\n'
            span_id: 1460
          ) (Token id:Id.Lit_Chars val:'\t\tfalse\n' span_id:1461) 
          (Token id:Id.Lit_Chars val:'\tfi\n' span_id:1462)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1469))}
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'override config option --stat' span_id:1476))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1480) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:1481) (Token id:Id.Lit_Chars val:'\ttest_config branch.master.mergeoptions "--stat" &&\n' span_id:1482) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1483) (Token id:Id.Lit_Chars val:'\tgit merge -n c2 >diffstat.txt &&\n' span_id:1484) 
          (Token
            id: Id.Lit_Chars
            val: '\tverify_merge file result.1-5 msg.1-5 &&\n'
            span_id: 1485
          ) (Token id:Id.Lit_Chars val:'\tverify_parents $c1 $c2 &&\n' span_id:1486) 
          (Token
            id: Id.Lit_Chars
            val: '\tif grep "^ file |  *2 +-$" diffstat.txt\n'
            span_id: 1487
          ) (Token id:Id.Lit_Chars val:'\tthen\n' span_id:1488) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "[OOPS] diffstat was generated"\n'
            span_id: 1489
          ) (Token id:Id.Lit_Chars val:'\t\tfalse\n' span_id:1490) 
          (Token id:Id.Lit_Chars val:'\tfi\n' span_id:1491)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1498))}
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge c1 with c2 (override --no-commit)' span_id:1505))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1509) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:1510) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config branch.master.mergeoptions "--no-commit" &&\n'
            span_id: 1511
          ) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1512) 
          (Token id:Id.Lit_Chars val:'\tgit merge --commit c2 &&\n' span_id:1513) (Token id:Id.Lit_Chars val:'\tverify_merge file result.1-5 msg.1-5 &&\n' span_id:1514) 
          (Token id:Id.Lit_Chars val:'\tverify_parents $c1 $c2\n' span_id:1515)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1522))}
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge c1 with c2 (override --squash)' span_id:1529))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1533) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:1534) (Token id:Id.Lit_Chars val:'\ttest_config branch.master.mergeoptions "--squash" &&\n' span_id:1535) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1536) (Token id:Id.Lit_Chars val:'\tgit merge --no-squash c2 &&\n' span_id:1537) 
          (Token
            id: Id.Lit_Chars
            val: '\tverify_merge file result.1-5 msg.1-5 &&\n'
            span_id: 1538
          ) (Token id:Id.Lit_Chars val:'\tverify_parents $c1 $c2\n' span_id:1539)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1546))}
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge c0 with c1 (no-ff)' span_id:1553))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1557) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:1558) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1559) 
          (Token id:Id.Lit_Chars val:'\tgit merge --no-ff c1 &&\n' span_id:1560) (Token id:Id.Lit_Chars val:'\tverify_merge file result.1 &&\n' span_id:1561) 
          (Token id:Id.Lit_Chars val:'\tverify_parents $c0 $c1\n' span_id:1562)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1569))}
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge c0 with c1 (merge.ff=false)' span_id:1576))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1580) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:1581) (Token id:Id.Lit_Chars val:'\ttest_config merge.ff "false" &&\n' span_id:1582) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1583) (Token id:Id.Lit_Chars val:'\tgit merge c1 &&\n' span_id:1584) 
          (Token id:Id.Lit_Chars val:'\tverify_merge file result.1 &&\n' span_id:1585) (Token id:Id.Lit_Chars val:'\tverify_parents $c0 $c1\n' span_id:1586)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1592))}
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'combine branch.master.mergeoptions with merge.ff'
            span_id: 1599
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1603) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:1604) (Token id:Id.Lit_Chars val:'\ttest_config branch.master.mergeoptions "--ff" &&\n' span_id:1605) 
          (Token id:Id.Lit_Chars val:'\ttest_config merge.ff "false" &&\n' span_id:1606) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1607) 
          (Token id:Id.Lit_Chars val:'\tgit merge c1 &&\n' span_id:1608) (Token id:Id.Lit_Chars val:'\tverify_merge file result.1 &&\n' span_id:1609) 
          (Token id:Id.Lit_Chars val:'\tverify_parents "$c0"\n' span_id:1610)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'tolerate unknown values for merge.ff' span_id:1617))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1621) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:1622) (Token id:Id.Lit_Chars val:'\ttest_config merge.ff "something-new" &&\n' span_id:1623) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:1624) (Token id:Id.Lit_Chars val:'\tgit merge c1 2>message &&\n' span_id:1625) 
          (Token id:Id.Lit_Chars val:'\tverify_head "$c1" &&\n' span_id:1626) (Token id:Id.Lit_Chars val:'\ttest_cmp empty message\n' span_id:1627)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'combining --squash and --no-ff is refused' span_id:1634))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1638) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:1639) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge --squash --no-ff c1 &&\n' span_id:1640) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git merge --no-ff --squash c1\n'
            span_id: 1641
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'option --ff-only overwrites --no-ff' span_id:1648))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1652) 
          (Token id:Id.Lit_Chars val:'\tgit merge --no-ff --ff-only c1 &&\n' span_id:1653) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge --no-ff --ff-only c2\n' span_id:1654)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'option --no-ff overrides merge.ff=only config' span_id:1661))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1665) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:1666) (Token id:Id.Lit_Chars val:'\ttest_config merge.ff only &&\n' span_id:1667) 
          (Token id:Id.Lit_Chars val:'\tgit merge --no-ff c1\n' span_id:1668)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge c0 with c1 (ff overrides no-ff)' span_id:1675))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1679) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:1680) (Token id:Id.Lit_Chars val:'\ttest_config branch.master.mergeoptions "--no-ff" &&\n' span_id:1681) 
          (Token id:Id.Lit_Chars val:'\tgit merge --ff c1 &&\n' span_id:1682) (Token id:Id.Lit_Chars val:'\tverify_merge file result.1 &&\n' span_id:1683) 
          (Token id:Id.Lit_Chars val:'\tverify_head $c1\n' span_id:1684)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge log message' span_id:1691))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1695) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:1696) (Token id:Id.Lit_Chars val:'\tgit merge --no-log c2 &&\n' span_id:1697) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit show -s --pretty=format:%b HEAD >msg.act &&\n'
            span_id: 1698
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp msg.nologff msg.act &&\n' span_id:1699) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1700) (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:1701) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config branch.master.mergeoptions "--no-ff" &&\n'
            span_id: 1702
          ) (Token id:Id.Lit_Chars val:'\tgit merge --no-log c2 &&\n' span_id:1703) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit show -s --pretty=format:%b HEAD >msg.act &&\n'
            span_id: 1704
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp msg.nolognoff msg.act &&\n' span_id:1705) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1706) (Token id:Id.Lit_Chars val:'\tgit merge --log c3 &&\n' span_id:1707) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit show -s --pretty=format:%b HEAD >msg.act &&\n'
            span_id: 1708
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp msg.log msg.act &&\n' span_id:1709) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1710) (Token id:Id.Lit_Chars val:'\tgit reset --hard HEAD^ &&\n' span_id:1711) 
          (Token id:Id.Lit_Chars val:'\ttest_config merge.log "yes" &&\n' span_id:1712) (Token id:Id.Lit_Chars val:'\tgit merge c3 &&\n' span_id:1713) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit show -s --pretty=format:%b HEAD >msg.act &&\n'
            span_id: 1714
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp msg.log msg.act\n' span_id:1715)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1722))}
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge c1 with c0, c2, c0, and c1' span_id:1729))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1733) 
          (Token id:Id.Lit_Chars val:'       git reset --hard c1 &&\n' span_id:1734) (Token id:Id.Lit_Chars val:'       test_tick &&\n' span_id:1735) 
          (Token id:Id.Lit_Chars val:'       git merge c0 c2 c0 c1 &&\n' span_id:1736) (Token id:Id.Lit_Chars val:'       verify_merge file result.1-5 &&\n' span_id:1737) 
          (Token id:Id.Lit_Chars val:'       verify_parents $c1 $c2\n' span_id:1738)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1745))}
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge c1 with c0, c2, c0, and c1' span_id:1752))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1756) 
          (Token id:Id.Lit_Chars val:'       git reset --hard c1 &&\n' span_id:1757) (Token id:Id.Lit_Chars val:'       test_tick &&\n' span_id:1758) 
          (Token id:Id.Lit_Chars val:'       git merge c0 c2 c0 c1 &&\n' span_id:1759) (Token id:Id.Lit_Chars val:'       verify_merge file result.1-5 &&\n' span_id:1760) 
          (Token id:Id.Lit_Chars val:'       verify_parents $c1 $c2\n' span_id:1761)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1768))}
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge c1 with c1 and c2' span_id:1775))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1779) 
          (Token id:Id.Lit_Chars val:'       git reset --hard c1 &&\n' span_id:1780) (Token id:Id.Lit_Chars val:'       test_tick &&\n' span_id:1781) 
          (Token id:Id.Lit_Chars val:'       git merge c1 c2 &&\n' span_id:1782) (Token id:Id.Lit_Chars val:'       verify_merge file result.1-5 &&\n' span_id:1783) 
          (Token id:Id.Lit_Chars val:'       verify_parents $c1 $c2\n' span_id:1784)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1791))}
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge fast-forward in a dirty tree' span_id:1798))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1802) 
          (Token id:Id.Lit_Chars val:'       git reset --hard c0 &&\n' span_id:1803) (Token id:Id.Lit_Chars val:'       mv file file1 &&\n' span_id:1804) 
          (Token id:Id.Lit_Chars val:'       cat file1 >file &&\n' span_id:1805) (Token id:Id.Lit_Chars val:'       rm -f file1 &&\n' span_id:1806) 
          (Token id:Id.Lit_Chars val:'       git merge c2\n' span_id:1807)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1814))}
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'in-index merge' span_id:1821))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1825) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:1826) (Token id:Id.Lit_Chars val:'\tgit merge --no-ff -s resolve c1 >out &&\n' span_id:1827) 
          (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "Wonderful." out &&\n' span_id:1828) (Token id:Id.Lit_Chars val:'\tverify_parents $c0 $c1\n' span_id:1829)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1836))}
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'refresh the index before merging' span_id:1843))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1847) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c1 &&\n' span_id:1848) (Token id:Id.Lit_Chars val:'\tcp file file.n && mv -f file.n file &&\n' span_id:1849) 
          (Token id:Id.Lit_Chars val:'\tgit merge c3\n' span_id:1850)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1856)
          fd: -1
          arg_word: {(expected.branch)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1859)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:1860)) 
              (OF)
            }
          here_end_span_id: 1864
          stdin_parts: [("Merge branch 'c5-branch' (early part)\n")]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1867)
          fd: -1
          arg_word: {(expected.tag)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1870)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:1871)) 
              (OF)
            }
          here_end_span_id: 1875
          stdin_parts: [("Merge commit 'c5~1'\n")]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge early part of c2' span_id:1880))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1884) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c3 &&\n' span_id:1885) (Token id:Id.Lit_Chars val:'\techo c4 >c4.c &&\n' span_id:1886) 
          (Token id:Id.Lit_Chars val:'\tgit add c4.c &&\n' span_id:1887) (Token id:Id.Lit_Chars val:'\tgit commit -m c4 &&\n' span_id:1888) 
          (Token id:Id.Lit_Chars val:'\tgit tag c4 &&\n' span_id:1889) (Token id:Id.Lit_Chars val:'\techo c5 >c5.c &&\n' span_id:1890) 
          (Token id:Id.Lit_Chars val:'\tgit add c5.c &&\n' span_id:1891) (Token id:Id.Lit_Chars val:'\tgit commit -m c5 &&\n' span_id:1892) 
          (Token id:Id.Lit_Chars val:'\tgit tag c5 &&\n' span_id:1893) (Token id:Id.Lit_Chars val:'\tgit reset --hard c3 &&\n' span_id:1894) 
          (Token id:Id.Lit_Chars val:'\techo c6 >c6.c &&\n' span_id:1895) (Token id:Id.Lit_Chars val:'\tgit add c6.c &&\n' span_id:1896) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m c6 &&\n' span_id:1897) (Token id:Id.Lit_Chars val:'\tgit tag c6 &&\n' span_id:1898) 
          (Token id:Id.Lit_Chars val:'\tgit branch -f c5-branch c5 &&\n' span_id:1899) (Token id:Id.Lit_Chars val:'\tgit merge c5-branch~1 &&\n' span_id:1900) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit show -s --pretty=tformat:%s HEAD >actual.branch &&\n'
            span_id: 1901
          ) (Token id:Id.Lit_Chars val:'\tgit reset --keep HEAD^ &&\n' span_id:1902) 
          (Token id:Id.Lit_Chars val:'\tgit merge c5~1 &&\n' span_id:1903) (Token id:Id.Lit_Chars val:'\tgit show -s --pretty=tformat:%s HEAD >actual.tag &&\n' span_id:1904) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_cmp expected.branch actual.branch &&\n'
            span_id: 1905
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected.tag actual.tag\n' span_id:1906)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1913))}
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge --no-ff --no-commit && commit' span_id:1920))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1924) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:1925) (Token id:Id.Lit_Chars val:'\tgit merge --no-ff --no-commit c1 &&\n' span_id:1926) 
          (Token id:Id.Lit_Chars val:'\tEDITOR=: git commit &&\n' span_id:1927) (Token id:Id.Lit_Chars val:'\tverify_parents $c0 $c1\n' span_id:1928)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1935))}
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'amending no-ff merge commit' span_id:1942))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1946) 
          (Token id:Id.Lit_Chars val:'\tEDITOR=: git commit --amend &&\n' span_id:1947) (Token id:Id.Lit_Chars val:'\tverify_parents $c0 $c1\n' span_id:1948)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'git log --graph --decorate --oneline --all' span_id:1955))}
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1961)
          fd: -1
          arg_word: {(editor)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1964)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:1965)) 
              (OF)
            }
          here_end_span_id: 1977
          stdin_parts: [
            ('#!/bin/sh\n')
            ('# Add a new message string that was not in the template\n')
            ('(\n')
            ('\techo "Merge work done on the side branch c1"\n')
            ('\techo\n')
            ('\tcat <"$1"\n')
            (') >"$1.tmp" && mv "$1.tmp" "$1"\n')
            ('# strip comments and blank lines from end of message\n')
            ('sed -e \'/^#/d\' < "$1" | sed -e :a -e \'/^\\n*$/{$d;N;ba\' -e \'}\' > expected\n')
          ]
        )
      ]
    )
    (C {(chmod)} {(755)} {(editor)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge --no-ff --edit' span_id:1988))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1992) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:1993) (Token id:Id.Lit_Chars val:'\tEDITOR=./editor git merge --no-ff --edit c1 &&\n' span_id:1994) 
          (Token id:Id.Lit_Chars val:'\tverify_parents $c0 $c1 &&\n' span_id:1995) (Token id:Id.Lit_Chars val:'\tgit cat-file commit HEAD >raw &&\n' span_id:1996) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep "work done on the side branch" raw &&\n'
            span_id: 1997
          ) (Token id:Id.Lit_Chars val:'\tsed "1,/^$/d" >actual raw &&\n' span_id:1998) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp actual expected\n' span_id:1999)
        )
      }
    )
    (C {(test_expect_success)} {(GPG)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge --ff-only tag' span_id:2008))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2012) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:2013) (Token id:Id.Lit_Chars val:'\tgit commit --allow-empty -m "A newer commit" &&\n' span_id:2014) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit tag -s -m "A newer commit" signed &&\n'
            span_id: 2015
          ) (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:2016) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2017) (Token id:Id.Lit_Chars val:'\tgit merge --ff-only signed &&\n' span_id:2018) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse signed^0 >expect &&\n' span_id:2019) (Token id:Id.Lit_Chars val:'\tgit rev-parse HEAD >actual &&\n' span_id:2020) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp actual expect\n' span_id:2021)
        )
      }
    )
    (C {(test_expect_success)} {(GPG)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge --no-edit tag should skip editor' span_id:2030))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2034) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:2035) (Token id:Id.Lit_Chars val:'\tgit commit --allow-empty -m "A newer commit" &&\n' span_id:2036) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit tag -f -s -m "A newer commit" signed &&\n'
            span_id: 2037
          ) (Token id:Id.Lit_Chars val:'\tgit reset --hard c0 &&\n' span_id:2038) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2039) (Token id:Id.Lit_Chars val:'\tEDITOR=false git merge --no-edit signed &&\n' span_id:2040) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse signed^0 >expect &&\n' span_id:2041) (Token id:Id.Lit_Chars val:'\tgit rev-parse HEAD^2 >actual &&\n' span_id:2042) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp actual expect\n' span_id:2043)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'set up mod-256 conflict scenario' span_id:2050))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2054) 
          (Token id:Id.Lit_Chars val:'\t# 256 near-identical stanzas...\n' span_id:2055) (Token id:Id.Lit_Chars val:'\tfor i in $(test_seq 1 256); do\n' span_id:2056) 
          (Token id:Id.Lit_Chars val:'\t\tfor j in 1 2 3 4 5; do\n' span_id:2057) (Token id:Id.Lit_Chars val:'\t\t\techo $i-$j\n' span_id:2058) 
          (Token id:Id.Lit_Chars val:'\t\tdone\n' span_id:2059) (Token id:Id.Lit_Chars val:'\tdone >file &&\n' span_id:2060) 
          (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:2061) (Token id:Id.Lit_Chars val:'\tgit commit -m base &&\n' span_id:2062) 
          (Token id:Id.Lit_Chars val:'\n' span_id:2063) (Token id:Id.Lit_Chars val:'\t# one side changes the first line of each to "master"\n' span_id:2064) 
          (Token id:Id.Lit_Chars val:'\tsed s/-1/-master/ <file >tmp &&\n' span_id:2065) (Token id:Id.Lit_Chars val:'\tmv tmp file &&\n' span_id:2066) 
          (Token id:Id.Lit_Chars val:'\tgit commit -am master &&\n' span_id:2067) (Token id:Id.Lit_Chars val:'\n' span_id:2068) 
          (Token
            id: Id.Lit_Chars
            val: '\t# and the other to "side"; merging the two will\n'
            span_id: 2069
          ) (Token id:Id.Lit_Chars val:'\t# yield 256 separate conflicts\n' span_id:2070) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b side HEAD^ &&\n' span_id:2071) (Token id:Id.Lit_Chars val:'\tsed s/-1/-side/ <file >tmp &&\n' span_id:2072) 
          (Token id:Id.Lit_Chars val:'\tmv tmp file &&\n' span_id:2073) (Token id:Id.Lit_Chars val:'\tgit commit -am side\n' span_id:2074)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge detects mod-256 conflicts (recursive)' span_id:2081))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2085) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:2086) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge -s recursive master\n' span_id:2087)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge detects mod-256 conflicts (resolve)' span_id:2094))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2098) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:2099) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge -s resolve master\n' span_id:2100)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge nothing into void' span_id:2107))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:2111) 
          (Token id:Id.Lit_Chars val:'\tgit init void &&\n' span_id:2112) (Token id:Id.Lit_Chars val:'\t(\n' span_id:2113) 
          (Token id:Id.Lit_Chars val:'\t\tcd void &&\n' span_id:2114) (Token id:Id.Lit_Chars val:'\t\tgit remote add up .. &&\n' span_id:2115) 
          (Token id:Id.Lit_Chars val:'\t\tgit fetch up &&\n' span_id:2116) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git merge FETCH_HEAD\n' span_id:2117) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:2118)
        )
      }
    )
    (C {(test_done)})
  ]
)