(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: 
            {
              (SQ <'git merge\n'> <'\n'> <'Testing basic merge operations/option parsing.\n'> <'\n'> 
                <'! [c0] commit 0\n'> <' ! [c1] commit 1\n'> <'  ! [c2] commit 2\n'> <'   ! [c3] commit 3\n'> <'    ! [c4] c4\n'> 
                <'     ! [c5] c5\n'> <'      ! [c6] c6\n'> <'       * [master] Merge commit '>
              ) (c1) (SQ <'\n'> <'--------\n'> <'       - [master] Merge commit '>) (c1) 
              (SQ <'\n'> <' +     * [c1] commit 1\n'> <'      +  [c6] c6\n'> <'     +   [c5] c5\n'> 
                <'    ++   [c4] c4\n'> <'   ++++  [c3] commit 3\n'> <'  +      [c2] commit 2\n'> <'+++++++* [c0] commit 0\n'>
              )
            }
          spids: [13]
        )
      ]
      spids: [13]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(.)} {(DQ ($ VSub_Name '$TEST_DIRECTORY')) (/lib-gpg.sh)})
    (SimpleCommand
      words: [{(printf)} {(SQ <'%s\\n'>)} {(1)} {(2)} {(3)} {(4)} {(5)} {(6)} {(7)} {(8)} {(9)}]
      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(file)} spids:[83])]
    )
    (SimpleCommand
      words: [{(printf)} {(SQ <'%s\\n'>)} {(SQ <'1 X'>)} {(2)} {(3)} {(4)} {(5)} {(6)} {(7)} {(8)} {(9)}]
      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(file.1)} spids:[112])]
    )
    (SimpleCommand
      words: [{(printf)} {(SQ <'%s\\n'>)} {(1)} {(2)} {(3)} {(4)} {(SQ <'5 X'>)} {(6)} {(7)} {(8)} {(9)}]
      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(file.5)} spids:[141])]
    )
    (SimpleCommand
      words: [{(printf)} {(SQ <'%s\\n'>)} {(1)} {(2)} {(3)} {(4)} {(5)} {(6)} {(7)} {(8)} {(SQ <'9 X'>)}]
      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(file.9)} spids:[170])]
    )
    (SimpleCommand
      words: [{(printf)} {(SQ <'%s\\n'>)} {(1)} {(2)} {(3)} {(4)} {(5)} {(6)} {(7)} {(8)} {(SQ <'9 Y'>)}]
      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(file.9y)} spids:[199])]
    )
    (SimpleCommand
      words: [{(printf)} {(SQ <'%s\\n'>)} {(SQ <'1 X'>)} {(2)} {(3)} {(4)} {(5)} {(6)} {(7)} {(8)} {(9)}]
      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(result.1)} spids:[228])]
    )
    (SimpleCommand
      words: [
        {(printf)}
        {(SQ <'%s\\n'>)}
        {(SQ <'1 X'>)}
        {(2)}
        {(3)}
        {(4)}
        {(SQ <'5 X'>)}
        {(6)}
        {(7)}
        {(8)}
        {(9)}
      ]
      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(result.1-5)} spids:[259])]
    )
    (SimpleCommand
      words: [
        {(printf)}
        {(SQ <'%s\\n'>)}
        {(SQ <'1 X'>)}
        {(2)}
        {(3)}
        {(4)}
        {(SQ <'5 X'>)}
        {(6)}
        {(7)}
        {(8)}
        {(SQ <'9 X'>)}
      ]
      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(result.1-5-9)} spids:[292])]
    )
    (SimpleCommand
      words: [{(printf)} {(SQ <'%s\\n'>)} {(1)} {(2)} {(3)} {(4)} {(5)} {(6)} {(7)} {(8)} {(SQ <'9 Z'>)}]
      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(result.9z)} spids:[321])]
    )
    (SimpleCommand redirects:[(Redir op_id:Redir_Great fd:-1 arg_word:{(empty)} spids:[324])])
    (FuncDef
      name: create_merge_msgs
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (SimpleCommand
                  words: [{(echo)} {(DQ ("Merge tag 'c2'"))}]
                  redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(msg.1-5)} spids:[342])]
                )
                (AndOr
                  children: [
                    (SimpleCommand
                      words: [{(echo)} {(DQ ("Merge tags 'c2' and 'c3'"))}]
                      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(msg.1-5-9)} spids:[354])]
                    )
                    (AndOr
                      children: [
                        (BraceGroup
                          children: [
                            (AndOr
                              children: [
                                (C {(echo)} {(DQ ('Squashed commit of the following:'))})
                                (AndOr
                                  children: [
                                    (C {(echo)})
                                    (C {(git)} {(log)} {(--no-merges)} {(Lit_Other '^') (HEAD)} {(c1)})
                                  ]
                                  op_id: Op_DAmp
                                )
                              ]
                              op_id: Op_DAmp
                            )
                          ]
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: -1
                              arg_word: {(squash.1)}
                              spids: [391]
                            )
                          ]
                          spids: [360]
                        )
                        (AndOr
                          children: [
                            (BraceGroup
                              children: [
                                (AndOr
                                  children: [
                                    (C {(echo)} {(DQ ('Squashed commit of the following:'))})
                                    (AndOr
                                      children: [
                                        (C {(echo)})
                                        (C {(git)} {(log)} {(--no-merges)} {(Lit_Other '^') (HEAD)} {(c2)})
                                      ]
                                      op_id: Op_DAmp
                                    )
                                  ]
                                  op_id: Op_DAmp
                                )
                              ]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: -1
                                  arg_word: {(squash.1-5)}
                                  spids: [428]
                                )
                              ]
                              spids: [397]
                            )
                            (AndOr
                              children: [
                                (BraceGroup
                                  children: [
                                    (AndOr
                                      children: [
                                        (C {(echo)} {(DQ ('Squashed commit of the following:'))})
                                        (AndOr
                                          children: [
                                            (C {(echo)})
                                            (C {(git)} {(log)} {(--no-merges)} {(Lit_Other '^') (HEAD)} 
                                              {(c2)} {(c3)}
                                            )
                                          ]
                                          op_id: Op_DAmp
                                        )
                                      ]
                                      op_id: Op_DAmp
                                    )
                                  ]
                                  redirects: [
                                    (Redir
                                      op_id: Redir_Great
                                      fd: -1
                                      arg_word: {(squash.1-5-9)}
                                      spids: [467]
                                    )
                                  ]
                                  spids: [434]
                                )
                                (AndOr
                                  children: [
                                    (SimpleCommand
                                      words: [{(Lit_Other ':')}]
                                      redirects: [
                                        (Redir
                                          op_id: Redir_Great
                                          fd: -1
                                          arg_word: {(msg.nologff)}
                                          spids: [475]
                                        )
                                      ]
                                    )
                                    (AndOr
                                      children: [
                                        (SimpleCommand
                                          words: [{(Lit_Other ':')}]
                                          redirects: [
                                            (Redir
                                              op_id: Redir_Great
                                              fd: -1
                                              arg_word: {(msg.nolognoff)}
                                              spids: [483]
                                            )
                                          ]
                                        )
                                        (BraceGroup
                                          children: [
                                            (AndOr
                                              children: [
                                                (C {(echo)} {(DQ ("* tag 'c3':"))})
                                                (C {(echo)} {(DQ ('  commit 3'))})
                                              ]
                                              op_id: Op_DAmp
                                            )
                                          ]
                                          redirects: [
                                            (Redir
                                              op_id: Redir_Great
                                              fd: -1
                                              arg_word: {(msg.log)}
                                              spids: [510]
                                            )
                                          ]
                                          spids: [489]
                                        )
                                      ]
                                      op_id: Op_DAmp
                                    )
                                  ]
                                  op_id: Op_DAmp
                                )
                              ]
                              op_id: Op_DAmp
                            )
                          ]
                          op_id: Op_DAmp
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [333]
        )
      spids: [328 332]
    )
    (FuncDef
      name: verify_merge
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (C {(test_cmp)} {(DQ ($ VSub_Number '$2'))} {(DQ ($ VSub_Number '$1'))})
                (AndOr
                  children: [
                    (C {(git)} {(update-index)} {(--refresh)})
                    (AndOr
                      children: [
                        (C {(git)} {(diff)} {(--exit-code)})
                        (If
                          arms: [
                            (if_arm
                              cond: [(C {(test)} {(-n)} {(DQ ($ VSub_Number '$3'))})]
                              action: [
                                (AndOr
                                  children: [
                                    (SimpleCommand
                                      words: [
                                        {(git)}
                                        {(show)}
                                        {(-s)}
                                        {(--pretty) (Lit_Other '=') (tformat) (Lit_Other ':') 
                                          (Lit_Other '%') (s)
                                        }
                                        {(HEAD)}
                                      ]
                                      redirects: [
                                        (Redir
                                          op_id: Redir_Great
                                          fd: -1
                                          arg_word: {(msg.act)}
                                          spids: [584]
                                        )
                                      ]
                                    )
                                    (C {(test_cmp)} {(DQ ($ VSub_Number '$3'))} {(msg.act)})
                                  ]
                                  op_id: Op_DAmp
                                )
                              ]
                              spids: [-1 566]
                            )
                          ]
                          spids: [-1 599]
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [521]
        )
      spids: [516 520]
    )
    (FuncDef
      name: verify_head
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (SimpleCommand
                  words: [{(echo)} {(DQ ($ VSub_Number '$1'))}]
                  redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(head.expected)} spids:[618])]
                )
                (AndOr
                  children: [
                    (SimpleCommand
                      words: [{(git)} {(rev-parse)} {(HEAD)}]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: -1
                          arg_word: {(head.actual)}
                          spids: [630]
                        )
                      ]
                    )
                    (C {(test_cmp)} {(head.expected)} {(head.actual)})
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [609]
        )
      spids: [604 608]
    )
    (FuncDef
      name: verify_parents
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (SimpleCommand
                  words: [{(printf)} {(SQ <'%s\\n'>)} {(DQ ($ VSub_At '$@'))}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: -1
                      arg_word: {(parents.expected)}
                      spids: [663]
                    )
                  ]
                )
                (AndOr
                  children: [
                    (SimpleCommand
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: -1
                          arg_word: {(parents.actual)}
                          spids: [669]
                        )
                      ]
                    )
                    (AndOr
                      children: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [(assign_pair lhs:(LhsName name:i) op:Equal rhs:{(1)} spids:[675])]
                          spids: [675]
                        )
                        (AndOr
                          children: [
                            (While
                              cond: [(C {(test)} {($ VSub_Name '$i')} {(-le)} {($ VSub_Pound '$#')})]
                              body: 
                                (DoGroup
                                  children: [
                                    (AndOr
                                      children: [
                                        (SimpleCommand
                                          words: [
                                            {(git)}
                                            {(rev-parse)}
                                            {(HEAD) (Lit_Other '^') ($ VSub_Name '$i')}
                                          ]
                                          redirects: [
                                            (Redir
                                              op_id: Redir_DGreat
                                              fd: -1
                                              arg_word: {(parents.actual)}
                                              spids: [703]
                                            )
                                          ]
                                        )
                                        (AndOr
                                          children: [
                                            (Assignment
                                              keyword: Assign_None
                                              pairs: [
                                                (assign_pair
                                                  lhs: (LhsName name:i)
                                                  op: Equal
                                                  rhs: 
                                                    {
                                                      (CommandSubPart
                                                        command_list: 
                                                          (CommandList
                                                            children: [
                                                              (C {(expr)} {($ VSub_Name '$i')} 
                                                                {(Lit_Other '+')} {(1)}
                                                              )
                                                            ]
                                                          )
                                                        left_token: <Left_CommandSub '$('>
                                                        spids: [710 718]
                                                      )
                                                    }
                                                  spids: [709]
                                                )
                                              ]
                                              spids: [709]
                                            )
                                            (ControlFlow
                                              token: <ControlFlow_Return return>
                                              arg_word: {(1)}
                                            )
                                          ]
                                          op_id: Op_DPipe
                                        )
                                      ]
                                      op_id: Op_DAmp
                                    )
                                  ]
                                  spids: [692 728]
                                )
                            )
                            (AndOr
                              children: [
                                (C {(test_must_fail)} {(git)} {(rev-parse)} {(--verify)} 
                                  {(DQ ('HEAD^') ($ VSub_Name '$i'))}
                                )
                                (C {(test_cmp)} {(parents.expected)} {(parents.actual)})
                              ]
                              op_id: Op_DAmp
                            )
                          ]
                          op_id: Op_DAmp
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [650]
        )
      spids: [645 649]
    )
    (FuncDef
      name: verify_mergeheads
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (SimpleCommand
                  words: [{(printf)} {(SQ <'%s\\n'>)} {(DQ ($ VSub_At '$@'))}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: -1
                      arg_word: {(mergehead.expected)}
                      spids: [776]
                    )
                  ]
                )
                (AndOr
                  children: [
                    (While
                      cond: [(C {(read)} {(sha1)} {(rest)})]
                      body: 
                        (DoGroup
                          children: [(C {(git)} {(rev-parse)} {($ VSub_Name '$sha1')})]
                          spids: [791 801]
                        )
                      redirects: [
                        (Redir
                          op_id: Redir_Less
                          fd: -1
                          arg_word: {(.git/MERGE_HEAD)}
                          spids: [803]
                        )
                        (Redir
                          op_id: Redir_Great
                          fd: -1
                          arg_word: {(mergehead.actual)}
                          spids: [806]
                        )
                      ]
                    )
                    (C {(test_cmp)} {(mergehead.expected)} {(mergehead.actual)})
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [763]
        )
      spids: [758 762]
    )
    (FuncDef
      name: verify_no_mergehead
      body: 
        (BraceGroup
          children: [(Pipeline children:[(C {(test)} {(-e)} {(.git/MERGE_HEAD)})] negated:True)]
          spids: [826]
        )
      spids: [821 825]
    )
    (C {(test_expect_success)} {(SQ <setup>)} 
      {
        (SQ <'\n'> <'\tgit add file &&\n'> <'\ttest_tick &&\n'> <'\tgit commit -m "commit 0" &&\n'> 
          <'\tgit tag c0 &&\n'> <'\tc0=$(git rev-parse HEAD) &&\n'> <'\tcp file.1 file &&\n'> <'\tgit add file &&\n'> 
          <'\ttest_tick &&\n'> <'\tgit commit -m "commit 1" &&\n'> <'\tgit tag c1 &&\n'> <'\tc1=$(git rev-parse HEAD) &&\n'> 
          <'\tgit reset --hard "$c0" &&\n'> <'\tcp file.5 file &&\n'> <'\tgit add file &&\n'> <'\ttest_tick &&\n'> 
          <'\tgit commit -m "commit 2" &&\n'> <'\tgit tag c2 &&\n'> <'\tc2=$(git rev-parse HEAD) &&\n'> <'\tgit reset --hard "$c0" &&\n'> 
          <'\tcp file.9y file &&\n'> <'\tgit add file &&\n'> <'\ttest_tick &&\n'> <'\tgit commit -m "commit 7" &&\n'> <'\tgit tag c7 &&\n'> 
          <'\tgit reset --hard "$c0" &&\n'> <'\tcp file.9 file &&\n'> <'\tgit add file &&\n'> <'\ttest_tick &&\n'> 
          <'\tgit commit -m "commit 3" &&\n'> <'\tgit tag c3 &&\n'> <'\tc3=$(git rev-parse HEAD) &&\n'> <'\tgit reset --hard "$c0" &&\n'> 
          <'\tcreate_merge_msgs\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'test option parsing'>)} 
      {
        (SQ <'\n'> <'\ttest_must_fail git merge -$ c1 &&\n'> 
          <'\ttest_must_fail git merge --no-such c1 &&\n'> <'\ttest_must_fail git merge -s foobar c1 &&\n'> <'\ttest_must_fail git merge -s=foobar c1 &&\n'> 
          <'\ttest_must_fail git merge -m &&\n'> <'\ttest_must_fail git merge\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'merge -h with invalid index'>)} 
      {
        (SQ <'\n'> <'\tmkdir broken &&\n'> <'\t(\n'> <'\t\tcd broken &&\n'> <'\t\tgit init &&\n'> 
          <'\t\t>.git/index &&\n'> <'\t\ttest_expect_code 129 git merge -h 2>usage\n'> <'\t) &&\n'> 
          <'\ttest_i18ngrep "[Uu]sage: git merge" broken/usage\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'reject non-strategy with a git-merge-foo name'>)} 
      {(SQ <'\n'> <'\ttest_must_fail git merge -s index c1\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'merge c0 with c1'>)} 
      {
        (SQ <'\n'> <'\techo "OBJID HEAD@{0}: merge c1: Fast-forward" >reflog.expected &&\n'> <'\n'> 
          <'\tgit reset --hard c0 &&\n'> <'\tgit merge c1 &&\n'> <'\tverify_merge file result.1 &&\n'> <'\tverify_head "$c1" &&\n'> <'\n'> 
          <'\tgit reflog -1 >reflog.actual &&\n'> <'\tsed "s/$_x05[0-9a-f]*/OBJID/g" reflog.actual >reflog.fuzzy &&\n'> 
          <'\ttest_cmp reflog.expected reflog.fuzzy\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'merge c0 with c1 with --ff-only'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c0 &&\n'> <'\tgit merge --ff-only c1 &&\n'> 
          <'\tgit merge --ff-only HEAD c0 c1 &&\n'> <'\tverify_merge file result.1 &&\n'> <'\tverify_head "$c1"\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'merge from unborn branch'>)} 
      {
        (SQ <'\n'> <'\tgit checkout -f master &&\n'> <'\ttest_might_fail git branch -D kid &&\n'> <'\n'> 
          <'\techo "OBJID HEAD@{0}: initial pull" >reflog.expected &&\n'> <'\n'> <'\tgit checkout --orphan kid &&\n'> <'\ttest_when_finished "git checkout -f master" &&\n'> 
          <'\tgit rm -fr . &&\n'> <'\ttest_tick &&\n'> <'\tgit merge --ff-only c1 &&\n'> <'\tverify_merge file result.1 &&\n'> 
          <'\tverify_head "$c1" &&\n'> <'\n'> <'\tgit reflog -1 >reflog.actual &&\n'> 
          <'\tsed "s/$_x05[0-9a-f][0-9a-f]/OBJID/g" reflog.actual >reflog.fuzzy &&\n'> <'\ttest_cmp reflog.expected reflog.fuzzy\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'merge c1 with c2'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c1 &&\n'> <'\ttest_tick &&\n'> <'\tgit merge c2 &&\n'> 
          <'\tverify_merge file result.1-5 msg.1-5 &&\n'> <'\tverify_parents $c1 $c2\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'merge --squash c3 with c7'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c3 &&\n'> <'\ttest_must_fail git merge --squash c7 &&\n'> 
          <'\tcat result.9z >file &&\n'> <'\tgit commit --no-edit -a &&\n'> <'\n'> <'\t{\n'> <'\t\tcat <<-EOF\n'> 
          <'\t\tSquashed commit of the following:\n'> <'\n'> <'\t\t$(git show -s c7)\n'> <'\n'> <'\t\t# Conflicts:\n'> <'\t\t#\tfile\n'> <'\t\tEOF\n'> 
          <'\t} >expect &&\n'> <'\tgit cat-file commit HEAD | sed -e '>
        ) (1) (Lit_Comma ',') (/) (Lit_Other '^') (Lit_Other '$') (/d) 
        (SQ <' >actual &&\n'> <'\ttest_cmp expect actual\n'>)
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'merge c1 with c2 and c3'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c1 &&\n'> <'\ttest_tick &&\n'> <'\tgit merge c2 c3 &&\n'> 
          <'\tverify_merge file result.1-5-9 msg.1-5-9 &&\n'> <'\tverify_parents $c1 $c2 $c3\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'merges with --ff-only'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c1 &&\n'> <'\ttest_tick &&\n'> 
          <'\ttest_must_fail git merge --ff-only c2 &&\n'> <'\ttest_must_fail git merge --ff-only c3 &&\n'> <'\ttest_must_fail git merge --ff-only c2 c3 &&\n'> 
          <'\tgit reset --hard c0 &&\n'> <'\tgit merge c3 &&\n'> <'\tverify_head $c3\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'merges with merge.ff=only'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c1 &&\n'> <'\ttest_tick &&\n'> 
          <'\ttest_config merge.ff "only" &&\n'> <'\ttest_must_fail git merge c2 &&\n'> <'\ttest_must_fail git merge c3 &&\n'> 
          <'\ttest_must_fail git merge c2 c3 &&\n'> <'\tgit reset --hard c0 &&\n'> <'\tgit merge c3 &&\n'> <'\tverify_head $c3\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'merge c0 with c1 (no-commit)'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c0 &&\n'> <'\tgit merge --no-commit c1 &&\n'> 
          <'\tverify_merge file result.1 &&\n'> <'\tverify_head $c1\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'merge c1 with c2 (no-commit)'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c1 &&\n'> <'\tgit merge --no-commit c2 &&\n'> 
          <'\tverify_merge file result.1-5 &&\n'> <'\tverify_head $c1 &&\n'> <'\tverify_mergeheads $c2\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'merge c1 with c2 and c3 (no-commit)'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c1 &&\n'> <'\tgit merge --no-commit c2 c3 &&\n'> 
          <'\tverify_merge file result.1-5-9 &&\n'> <'\tverify_head $c1 &&\n'> <'\tverify_mergeheads $c2 $c3\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'merge c0 with c1 (squash)'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c0 &&\n'> <'\tgit merge --squash c1 &&\n'> 
          <'\tverify_merge file result.1 &&\n'> <'\tverify_head $c0 &&\n'> <'\tverify_no_mergehead &&\n'> <'\ttest_cmp squash.1 .git/SQUASH_MSG\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'merge c0 with c1 (squash, ff-only)'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c0 &&\n'> <'\tgit merge --squash --ff-only c1 &&\n'> 
          <'\tverify_merge file result.1 &&\n'> <'\tverify_head $c0 &&\n'> <'\tverify_no_mergehead &&\n'> <'\ttest_cmp squash.1 .git/SQUASH_MSG\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'merge c1 with c2 (squash)'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c1 &&\n'> <'\tgit merge --squash c2 &&\n'> 
          <'\tverify_merge file result.1-5 &&\n'> <'\tverify_head $c1 &&\n'> <'\tverify_no_mergehead &&\n'> <'\ttest_cmp squash.1-5 .git/SQUASH_MSG\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'unsuccessful merge of c1 with c2 (squash, ff-only)'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c1 &&\n'> 
          <'\ttest_must_fail git merge --squash --ff-only c2\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'merge c1 with c2 and c3 (squash)'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c1 &&\n'> <'\tgit merge --squash c2 c3 &&\n'> 
          <'\tverify_merge file result.1-5-9 &&\n'> <'\tverify_head $c1 &&\n'> <'\tverify_no_mergehead &&\n'> <'\ttest_cmp squash.1-5-9 .git/SQUASH_MSG\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'merge c1 with c2 (no-commit in config)'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c1 &&\n'> 
          <'\ttest_config branch.master.mergeoptions "--no-commit" &&\n'> <'\tgit merge c2 &&\n'> <'\tverify_merge file result.1-5 &&\n'> <'\tverify_head $c1 &&\n'> 
          <'\tverify_mergeheads $c2\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'merge c1 with c2 (log in config)'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c1 &&\n'> <'\tgit merge --log c2 &&\n'> 
          <'\tgit show -s --pretty=tformat:%s%n%b >expect &&\n'> <'\n'> <'\ttest_config branch.master.mergeoptions "--log" &&\n'> <'\tgit reset --hard c1 &&\n'> 
          <'\tgit merge c2 &&\n'> <'\tgit show -s --pretty=tformat:%s%n%b >actual &&\n'> <'\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'merge c1 with c2 (log in config gets overridden)'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c1 &&\n'> <'\tgit merge c2 &&\n'> 
          <'\tgit show -s --pretty=tformat:%s%n%b >expect &&\n'> <'\n'> <'\ttest_config branch.master.mergeoptions "--no-log" &&\n'> 
          <'\ttest_config merge.log "true" &&\n'> <'\tgit reset --hard c1 &&\n'> <'\tgit merge c2 &&\n'> 
          <'\tgit show -s --pretty=tformat:%s%n%b >actual &&\n'> <'\n'> <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'merge c1 with c2 (squash in config)'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c1 &&\n'> 
          <'\ttest_config branch.master.mergeoptions "--squash" &&\n'> <'\tgit merge c2 &&\n'> <'\tverify_merge file result.1-5 &&\n'> <'\tverify_head $c1 &&\n'> 
          <'\tverify_no_mergehead &&\n'> <'\ttest_cmp squash.1-5 .git/SQUASH_MSG\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'override config option -n with --summary'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c1 &&\n'> 
          <'\ttest_config branch.master.mergeoptions "-n" &&\n'> <'\ttest_tick &&\n'> <'\tgit merge --summary c2 >diffstat.txt &&\n'> 
          <'\tverify_merge file result.1-5 msg.1-5 &&\n'> <'\tverify_parents $c1 $c2 &&\n'> <'\tif ! grep "^ file |  *2 +-$" diffstat.txt\n'> <'\tthen\n'> 
          <'\t\techo "[OOPS] diffstat was not generated with --summary"\n'> <'\t\tfalse\n'> <'\tfi\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'override config option -n with --stat'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c1 &&\n'> 
          <'\ttest_config branch.master.mergeoptions "-n" &&\n'> <'\ttest_tick &&\n'> <'\tgit merge --stat c2 >diffstat.txt &&\n'> 
          <'\tverify_merge file result.1-5 msg.1-5 &&\n'> <'\tverify_parents $c1 $c2 &&\n'> <'\tif ! grep "^ file |  *2 +-$" diffstat.txt\n'> <'\tthen\n'> 
          <'\t\techo "[OOPS] diffstat was not generated with --stat"\n'> <'\t\tfalse\n'> <'\tfi\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'override config option --stat'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c1 &&\n'> 
          <'\ttest_config branch.master.mergeoptions "--stat" &&\n'> <'\ttest_tick &&\n'> <'\tgit merge -n c2 >diffstat.txt &&\n'> 
          <'\tverify_merge file result.1-5 msg.1-5 &&\n'> <'\tverify_parents $c1 $c2 &&\n'> <'\tif grep "^ file |  *2 +-$" diffstat.txt\n'> <'\tthen\n'> 
          <'\t\techo "[OOPS] diffstat was generated"\n'> <'\t\tfalse\n'> <'\tfi\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'merge c1 with c2 (override --no-commit)'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c1 &&\n'> 
          <'\ttest_config branch.master.mergeoptions "--no-commit" &&\n'> <'\ttest_tick &&\n'> <'\tgit merge --commit c2 &&\n'> <'\tverify_merge file result.1-5 msg.1-5 &&\n'> 
          <'\tverify_parents $c1 $c2\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'merge c1 with c2 (override --squash)'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c1 &&\n'> 
          <'\ttest_config branch.master.mergeoptions "--squash" &&\n'> <'\ttest_tick &&\n'> <'\tgit merge --no-squash c2 &&\n'> 
          <'\tverify_merge file result.1-5 msg.1-5 &&\n'> <'\tverify_parents $c1 $c2\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'merge c0 with c1 (no-ff)'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c0 &&\n'> <'\ttest_tick &&\n'> <'\tgit merge --no-ff c1 &&\n'> 
          <'\tverify_merge file result.1 &&\n'> <'\tverify_parents $c0 $c1\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'merge c0 with c1 (merge.ff=false)'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c0 &&\n'> <'\ttest_config merge.ff "false" &&\n'> 
          <'\ttest_tick &&\n'> <'\tgit merge c1 &&\n'> <'\tverify_merge file result.1 &&\n'> <'\tverify_parents $c0 $c1\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'combine branch.master.mergeoptions with merge.ff'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c0 &&\n'> 
          <'\ttest_config branch.master.mergeoptions "--ff" &&\n'> <'\ttest_config merge.ff "false" &&\n'> <'\ttest_tick &&\n'> <'\tgit merge c1 &&\n'> 
          <'\tverify_merge file result.1 &&\n'> <'\tverify_parents "$c0"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'tolerate unknown values for merge.ff'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c0 &&\n'> <'\ttest_config merge.ff "something-new" &&\n'> 
          <'\ttest_tick &&\n'> <'\tgit merge c1 2>message &&\n'> <'\tverify_head "$c1" &&\n'> <'\ttest_cmp empty message\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'combining --squash and --no-ff is refused'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c0 &&\n'> 
          <'\ttest_must_fail git merge --squash --no-ff c1 &&\n'> <'\ttest_must_fail git merge --no-ff --squash c1\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'option --ff-only overwrites --no-ff'>)} 
      {
        (SQ <'\n'> <'\tgit merge --no-ff --ff-only c1 &&\n'> 
          <'\ttest_must_fail git merge --no-ff --ff-only c2\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'option --no-ff overrides merge.ff=only config'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c0 &&\n'> <'\ttest_config merge.ff only &&\n'> 
          <'\tgit merge --no-ff c1\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'merge c0 with c1 (ff overrides no-ff)'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c0 &&\n'> 
          <'\ttest_config branch.master.mergeoptions "--no-ff" &&\n'> <'\tgit merge --ff c1 &&\n'> <'\tverify_merge file result.1 &&\n'> <'\tverify_head $c1\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'merge log message'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c0 &&\n'> <'\tgit merge --no-log c2 &&\n'> 
          <'\tgit show -s --pretty=format:%b HEAD >msg.act &&\n'> <'\ttest_cmp msg.nologff msg.act &&\n'> <'\n'> <'\tgit reset --hard c0 &&\n'> 
          <'\ttest_config branch.master.mergeoptions "--no-ff" &&\n'> <'\tgit merge --no-log c2 &&\n'> <'\tgit show -s --pretty=format:%b HEAD >msg.act &&\n'> 
          <'\ttest_cmp msg.nolognoff msg.act &&\n'> <'\n'> <'\tgit merge --log c3 &&\n'> <'\tgit show -s --pretty=format:%b HEAD >msg.act &&\n'> 
          <'\ttest_cmp msg.log msg.act &&\n'> <'\n'> <'\tgit reset --hard HEAD^ &&\n'> <'\ttest_config merge.log "yes" &&\n'> <'\tgit merge c3 &&\n'> 
          <'\tgit show -s --pretty=format:%b HEAD >msg.act &&\n'> <'\ttest_cmp msg.log msg.act\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'merge c1 with c0, c2, c0, and c1'>)} 
      {
        (SQ <'\n'> <'       git reset --hard c1 &&\n'> <'       test_tick &&\n'> 
          <'       git merge c0 c2 c0 c1 &&\n'> <'       verify_merge file result.1-5 &&\n'> <'       verify_parents $c1 $c2\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'merge c1 with c0, c2, c0, and c1'>)} 
      {
        (SQ <'\n'> <'       git reset --hard c1 &&\n'> <'       test_tick &&\n'> 
          <'       git merge c0 c2 c0 c1 &&\n'> <'       verify_merge file result.1-5 &&\n'> <'       verify_parents $c1 $c2\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'merge c1 with c1 and c2'>)} 
      {
        (SQ <'\n'> <'       git reset --hard c1 &&\n'> <'       test_tick &&\n'> 
          <'       git merge c1 c2 &&\n'> <'       verify_merge file result.1-5 &&\n'> <'       verify_parents $c1 $c2\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'merge fast-forward in a dirty tree'>)} 
      {
        (SQ <'\n'> <'       git reset --hard c0 &&\n'> <'       mv file file1 &&\n'> 
          <'       cat file1 >file &&\n'> <'       rm -f file1 &&\n'> <'       git merge c2\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'in-index merge'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c0 &&\n'> <'\tgit merge --no-ff -s resolve c1 >out &&\n'> 
          <'\ttest_i18ngrep "Wonderful." out &&\n'> <'\tverify_parents $c0 $c1\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'refresh the index before merging'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c1 &&\n'> <'\tcp file file.n && mv -f file.n file &&\n'> 
          <'\tgit merge c3\n'>
        )
      }
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(expected.branch)} spids:[1856])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: {("Merge branch 'c5-branch' (early part)\n")}
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [1859]
        )
      ]
    )
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(expected.tag)} spids:[1865])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: {("Merge commit 'c5~1'\n")}
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [1868]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <'merge early part of c2'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c3 &&\n'> <'\techo c4 >c4.c &&\n'> <'\tgit add c4.c &&\n'> 
          <'\tgit commit -m c4 &&\n'> <'\tgit tag c4 &&\n'> <'\techo c5 >c5.c &&\n'> <'\tgit add c5.c &&\n'> <'\tgit commit -m c5 &&\n'> 
          <'\tgit tag c5 &&\n'> <'\tgit reset --hard c3 &&\n'> <'\techo c6 >c6.c &&\n'> <'\tgit add c6.c &&\n'> 
          <'\tgit commit -m c6 &&\n'> <'\tgit tag c6 &&\n'> <'\tgit branch -f c5-branch c5 &&\n'> <'\tgit merge c5-branch~1 &&\n'> 
          <'\tgit show -s --pretty=tformat:%s HEAD >actual.branch &&\n'> <'\tgit reset --keep HEAD^ &&\n'> <'\tgit merge c5~1 &&\n'> 
          <'\tgit show -s --pretty=tformat:%s HEAD >actual.tag &&\n'> <'\ttest_cmp expected.branch actual.branch &&\n'> <'\ttest_cmp expected.tag actual.tag\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'merge --no-ff --no-commit && commit'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c0 &&\n'> <'\tgit merge --no-ff --no-commit c1 &&\n'> 
          <'\tEDITOR=: git commit &&\n'> <'\tverify_parents $c0 $c1\n'>
        )
      }
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (C {(test_expect_success)} {(SQ <'amending no-ff merge commit'>)} 
      {(SQ <'\n'> <'\tEDITOR=: git commit --amend &&\n'> <'\tverify_parents $c0 $c1\n'>)}
    )
    (C {(test_debug)} {(SQ <'git log --graph --decorate --oneline --all'>)})
    (SimpleCommand
      words: [{(cat)}]
      redirects: [
        (Redir op_id:Redir_Great fd:-1 arg_word:{(editor)} spids:[1957])
        (HereDoc
          op_id: Redir_DLess
          fd: -1
          body: 
            {('#!/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')
            }
          do_expansion: False
          here_end: EOF
          was_filled: True
          spids: [1960]
        )
      ]
    )
    (C {(chmod)} {(755)} {(editor)})
    (C {(test_expect_success)} {(SQ <'merge --no-ff --edit'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c0 &&\n'> 
          <'\tEDITOR=./editor git merge --no-ff --edit c1 &&\n'> <'\tverify_parents $c0 $c1 &&\n'> <'\tgit cat-file commit HEAD >raw &&\n'> 
          <'\tgrep "work done on the side branch" raw &&\n'> <'\tsed "1,/^$/d" >actual raw &&\n'> <'\ttest_cmp actual expected\n'>
        )
      }
    )
    (C {(test_expect_success)} {(GPG)} {(SQ <'merge --ff-only tag'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c0 &&\n'> 
          <'\tgit commit --allow-empty -m "A newer commit" &&\n'> <'\tgit tag -s -m "A newer commit" signed &&\n'> <'\tgit reset --hard c0 &&\n'> <'\n'> 
          <'\tgit merge --ff-only signed &&\n'> <'\tgit rev-parse signed^0 >expect &&\n'> <'\tgit rev-parse HEAD >actual &&\n'> 
          <'\ttest_cmp actual expect\n'>
        )
      }
    )
    (C {(test_expect_success)} {(GPG)} {(SQ <'merge --no-edit tag should skip editor'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard c0 &&\n'> 
          <'\tgit commit --allow-empty -m "A newer commit" &&\n'> <'\tgit tag -f -s -m "A newer commit" signed &&\n'> <'\tgit reset --hard c0 &&\n'> <'\n'> 
          <'\tEDITOR=false git merge --no-edit signed &&\n'> <'\tgit rev-parse signed^0 >expect &&\n'> <'\tgit rev-parse HEAD^2 >actual &&\n'> 
          <'\ttest_cmp actual expect\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'set up mod-256 conflict scenario'>)} 
      {
        (SQ <'\n'> <'\t# 256 near-identical stanzas...\n'> <'\tfor i in $(test_seq 1 256); do\n'> 
          <'\t\tfor j in 1 2 3 4 5; do\n'> <'\t\t\techo $i-$j\n'> <'\t\tdone\n'> <'\tdone >file &&\n'> <'\tgit add file &&\n'> 
          <'\tgit commit -m base &&\n'> <'\n'> <'\t# one side changes the first line of each to "master"\n'> 
          <'\tsed s/-1/-master/ <file >tmp &&\n'> <'\tmv tmp file &&\n'> <'\tgit commit -am master &&\n'> <'\n'> 
          <'\t# and the other to "side"; merging the two will\n'> <'\t# yield 256 separate conflicts\n'> <'\tgit checkout -b side HEAD^ &&\n'> 
          <'\tsed s/-1/-side/ <file >tmp &&\n'> <'\tmv tmp file &&\n'> <'\tgit commit -am side\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'merge detects mod-256 conflicts (recursive)'>)} 
      {(SQ <'\n'> <'\tgit reset --hard &&\n'> <'\ttest_must_fail git merge -s recursive master\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'merge detects mod-256 conflicts (resolve)'>)} 
      {(SQ <'\n'> <'\tgit reset --hard &&\n'> <'\ttest_must_fail git merge -s resolve master\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'merge nothing into void'>)} 
      {
        (SQ <'\n'> <'\tgit init void &&\n'> <'\t(\n'> <'\t\tcd void &&\n'> 
          <'\t\tgit remote add up .. &&\n'> <'\t\tgit fetch up &&\n'> <'\t\ttest_must_fail git merge FETCH_HEAD\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)