(command.CommandList
  children: [
    (command.ShAssignment
      left: <Id.Lit_VarLike 'test_description='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'test_description='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'test_description='> name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'per path merge controlled by merge attribute'>)}
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [{<.>} {<'./test-lib.sh'>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {<setup>}
        {
          (SQ <'\n'> <'\n'> <'\tfor f in text binary union\n'> <'\tdo\n'> 
            <'\t\techo Initial >$f && git add $f || return 1\n'> <'\tdone &&\n'> <'\ttest_tick &&\n'> <'\tgit commit -m Initial &&\n'> <'\n'> <'\tgit branch side &&\n'> 
            <'\tfor f in text binary union\n'> <'\tdo\n'> <'\t\techo Master >>$f && git add $f || return 1\n'> <'\tdone &&\n'> <'\ttest_tick &&\n'> 
            <'\tgit commit -m Master &&\n'> <'\n'> <'\tgit checkout side &&\n'> <'\tfor f in text binary union\n'> <'\tdo\n'> 
            <'\t\techo Side >>$f && git add $f || return 1\n'> <'\tdone &&\n'> <'\ttest_tick &&\n'> <'\tgit commit -m Side &&\n'> <'\n'> <'\tgit tag anchor\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {<merge>}
        {
          (SQ <'\n'> <'\n'> <'\t{\n'> <'\t\techo "binary -merge"\n'> <'\t\techo "union merge=union"\n'> 
            <'\t} >.gitattributes &&\n'> <'\n'> <'\tif git merge master\n'> <'\tthen\n'> <'\t\techo Gaah, should have conflicted\n'> 
            <'\t\tfalse\n'> <'\telse\n'> <'\t\techo Ok, conflicted.\n'> <'\tfi\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'check merge result in index'>)}
        {
          (SQ <'\n'> <'\n'> <'\tgit ls-files -u | grep binary &&\n'> 
            <'\tgit ls-files -u | grep text &&\n'> <'\t! (git ls-files -u | grep union)\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'check merge result in working tree'>)}
        {
          (SQ <'\n'> <'\n'> <'\tgit cat-file -p HEAD:binary >binary-orig &&\n'> 
            <'\tgrep "<<<<<<<" text &&\n'> <'\tcmp binary-orig binary &&\n'> <'\t! grep "<<<<<<<" union &&\n'> <'\tgrep Master union &&\n'> 
            <'\tgrep Side union\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'retry the merge with longer context'>)}
        {
          (SQ <'\n'> <'\techo text conflict-marker-size=32 >>.gitattributes &&\n'> 
            <'\tgit checkout -m text &&\n'> <'\tsed -ne "/^\\([<=>]\\)\\1\\1\\1*/{\n'> <'\t\ts/ .*$//\n'> <'\t\tp\n'> <'\t}" >actual text &&\n'> 
            <'\tgrep ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" actual &&\n'> <'\tgrep "================================" actual &&\n'> 
            <'\tgrep "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <cat>
      more_env: []
      words: [{<cat>}]
      redirects: [
        (Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'./custom-merge'>})
        (Redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\E'> ch:E) <OF>}
              here_end_tok: <Id.Undefined_Tok ''>
              stdin_parts: [
                <'#!/bin/sh\n'>
                <'\n'>
                <'orig="$1" ours="$2" theirs="$3" exit="$4" path=$5\n'>
                <'(\n'>
                <'\techo "orig is $orig"\n'>
                <'\techo "ours is $ours"\n'>
                <'\techo "theirs is $theirs"\n'>
                <'\techo "path is $path"\n'>
                <'\techo "=== orig ==="\n'>
                <'\tcat "$orig"\n'>
                <'\techo "=== ours ==="\n'>
                <'\tcat "$ours"\n'>
                <'\techo "=== theirs ==="\n'>
                <'\tcat "$theirs"\n'>
                <') >"$ours+"\n'>
                <'cat "$ours+" >"$ours"\n'>
                <'rm -f "$ours+"\n'>
                <'exit "$exit"\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (command.Simple
      blame_tok: <chmod>
      more_env: []
      words: [{<chmod>} {<Id.Lit_Other '+'> <x>} {<'./custom-merge'>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'custom merge backend'>)}
        {
          (SQ <'\n'> <'\n'> <'\techo "* merge=union" >.gitattributes &&\n'> 
            <'\techo "text merge=custom" >>.gitattributes &&\n'> <'\n'> <'\tgit reset --hard anchor &&\n'> <'\tgit config --replace-all \\\n'> 
            <'\tmerge.custom.driver "./custom-merge %O %A %B 0 %P" &&\n'> <'\tgit config --replace-all \\\n'> <'\tmerge.custom.name "custom merge driver for testing" &&\n'> 
            <'\n'> <'\tgit merge master &&\n'> <'\n'> <'\tcmp binary union &&\n'> <'\tsed -e 1,3d text >check-1 &&\n'> 
            <'\to=$(git unpack-file master^:text) &&\n'> <'\ta=$(git unpack-file side^:text) &&\n'> <'\tb=$(git unpack-file master:text) &&\n'> 
            <'\tsh -c "./custom-merge $o $a $b 0 '>
          ) <text> 
          (SQ <'" &&\n'> <'\tsed -e 1,3d $a >check-2 &&\n'> <'\tcmp check-1 check-2 &&\n'> 
            <'\trm -f $o $a $b\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'custom merge backend'>)}
        {
          (SQ <'\n'> <'\n'> <'\tgit reset --hard anchor &&\n'> <'\tgit config --replace-all \\\n'> 
            <'\tmerge.custom.driver "./custom-merge %O %A %B 1 %P" &&\n'> <'\tgit config --replace-all \\\n'> <'\tmerge.custom.name "custom merge driver for testing" &&\n'> 
            <'\n'> <'\tif git merge master\n'> <'\tthen\n'> <'\t\techo "Eh? should have conflicted"\n'> <'\t\tfalse\n'> 
            <'\telse\n'> <'\t\techo "Ok, conflicted"\n'> <'\tfi &&\n'> <'\n'> <'\tcmp binary union &&\n'> 
            <'\tsed -e 1,3d text >check-1 &&\n'> <'\to=$(git unpack-file master^:text) &&\n'> <'\ta=$(git unpack-file anchor:text) &&\n'> 
            <'\tb=$(git unpack-file master:text) &&\n'> <'\tsh -c "./custom-merge $o $a $b 0 '>
          ) <text> 
          (SQ <'" &&\n'> <'\tsed -e 1,3d $a >check-2 &&\n'> <'\tcmp check-1 check-2 &&\n'> 
            <'\tsed -e 1,3d -e 4q $a >check-3 &&\n'> <'\techo "path is text" >expect &&\n'> <'\tcmp expect check-3 &&\n'> <'\trm -f $o $a $b\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'up-to-date merge without common ancestor'>)}
        {
          (SQ <'\n'> <'\ttest_create_repo repo1 &&\n'> <'\ttest_create_repo repo2 &&\n'> 
            <'\ttest_tick &&\n'> <'\t(\n'> <'\t\tcd repo1 &&\n'> <'\t\t>a &&\n'> <'\t\tgit add a &&\n'> <'\t\tgit commit -m initial\n'> 
            <'\t) &&\n'> <'\ttest_tick &&\n'> <'\t(\n'> <'\t\tcd repo2 &&\n'> <'\t\tgit commit --allow-empty -m initial\n'> 
            <'\t) &&\n'> <'\ttest_tick &&\n'> <'\t(\n'> <'\t\tcd repo1 &&\n'> <'\t\tgit fetch ../repo2 master &&\n'> 
            <'\t\tgit merge --allow-unrelated-histories FETCH_HEAD\n'> <'\t)\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'custom merge does not lock index'>)}
        {
          (SQ <'\n'> <'\tgit reset --hard anchor &&\n'> 
            <'\twrite_script sleep-one-second.sh <<-\\EOF &&\n'> <'\t\tsleep 1 &\n'> <'\t\techo $! >sleep.pid\n'> <'\tEOF\n'> 
            <'\ttest_when_finished "kill \\$(cat sleep.pid)" &&\n'> <'\n'> <'\ttest_write_lines >.gitattributes \\\n'> 
            <'\t\t"* merge=ours" "text merge=sleep-one-second" &&\n'> <'\ttest_config merge.ours.driver true &&\n'> 
            <'\ttest_config merge.sleep-one-second.driver ./sleep-one-second.sh &&\n'> <'\tgit merge master\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_done>
      more_env: []
      words: [{<test_done>}]
      redirects: []
      do_fork: T
    )
  ]
)