(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 <'CRLF merge conflict across text=auto change\n'> <'\n'> 
                <'* [master] remove .gitattributes\n'> <' ! [side] add line from b\n'> <'--\n'> <' + [side] add line from b\n'> 
                <'*  [master] remove .gitattributes\n'> <'*  [master^] add line from a\n'> <'*  [master~2] normalize file\n'> <'*+ [side^] Initial\n'>
              )
            }
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [{<.>} {<'./test-lib.sh'>}]
      redirects: []
      do_fork: T
    )
    (command.AndOr
      children: [
        (command.Simple
          blame_tok: <test_have_prereq>
          more_env: []
          words: [{<test_have_prereq>} {<SED_STRIPS_CR>}]
          redirects: []
          do_fork: T
        )
        (command.ShAssignment
          left: <Id.Lit_VarLike 'SED_OPTIONS='>
          pairs: [
            (AssignPair
              left: <Id.Lit_VarLike 'SED_OPTIONS='>
              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'SED_OPTIONS='> name:SED_OPTIONS)
              op: assign_op.Equal
              rhs: {<-b>}
            )
          ]
          redirects: []
        )
      ]
      ops: [<Id.Op_DAmp _>]
    )
    (command.ShFunction
      name_tok: <compare_files>
      name: compare_files
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <tr>
                  more_env: []
                  words: [{<tr>} {(SQ <'\\015\\000'>)} {<QN>}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_Less '<'>
                      loc: (redir_loc.Fd fd:0)
                      arg: {(DQ ($ Id.VSub_Number 1))}
                    )
                    (Redir
                      op: <Id.Redir_Great '>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {(DQ ($ Id.VSub_Number 1)) <.expect>}
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <tr>
                  more_env: []
                  words: [{<tr>} {(SQ <'\\015\\000'>)} {<QN>}]
                  redirects: [
                    (Redir
                      op: <Id.Redir_Less '<'>
                      loc: (redir_loc.Fd fd:0)
                      arg: {(DQ ($ Id.VSub_Number 2))}
                    )
                    (Redir
                      op: <Id.Redir_Great '>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {(DQ ($ Id.VSub_Number 2)) <.actual>}
                    )
                  ]
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <test_cmp>
                  more_env: []
                  words: [
                    {<test_cmp>}
                    {(DQ ($ Id.VSub_Number 1)) <.expect>}
                    {(DQ ($ Id.VSub_Number 2)) <.actual>}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <rm>
                  more_env: []
                  words: [
                    {<rm>}
                    {(DQ ($ Id.VSub_Number 1)) <.expect>}
                    {(DQ ($ Id.VSub_Number 2)) <.actual>}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _> <Id.Op_DAmp _> <Id.Op_DAmp _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {<setup>}
        {
          (SQ <'\n'> <'\tgit config core.autocrlf false &&\n'> <'\n'> 
            <'\techo first line | append_cr >file &&\n'> <'\techo first line >control_file &&\n'> <'\techo only line >inert_file &&\n'> <'\n'> 
            <'\tgit add file control_file inert_file &&\n'> <'\ttest_tick &&\n'> <'\tgit commit -m "Initial" &&\n'> <'\tgit tag initial &&\n'> 
            <'\tgit branch side &&\n'> <'\n'> <'\techo "* text=auto" >.gitattributes &&\n'> <'\techo first line >file &&\n'> 
            <'\tgit add .gitattributes file &&\n'> <'\ttest_tick &&\n'> <'\tgit commit -m "normalize file" &&\n'> <'\n'> 
            <'\techo same line | append_cr >>file &&\n'> <'\techo same line >>control_file &&\n'> <'\tgit add file control_file &&\n'> <'\ttest_tick &&\n'> 
            <'\tgit commit -m "add line from a" &&\n'> <'\tgit tag a &&\n'> <'\n'> <'\tgit rm .gitattributes &&\n'> <'\trm file &&\n'> 
            <'\tgit checkout file &&\n'> <'\ttest_tick &&\n'> <'\tgit commit -m "remove .gitattributes" &&\n'> <'\tgit tag c &&\n'> <'\n'> 
            <'\tgit checkout side &&\n'> <'\techo same line | append_cr >>file &&\n'> <'\techo same line >>control_file &&\n'> 
            <'\tgit add file control_file &&\n'> <'\ttest_tick &&\n'> <'\tgit commit -m "add line from b" &&\n'> <'\tgit tag b &&\n'> <'\n'> 
            <'\tgit checkout master\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'set up fuzz_conflict() helper'>)}
        {
          (SQ <'\n'> <'\tfuzz_conflict() {\n'> 
            <'\t\tsed $SED_OPTIONS -e "s/^\\([<>=]......\\) .*/\\1/" "$@"\n'> <'\t}\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'Merge after setting text=auto'>)}
        {
          (SQ <'\n'> <'\tcat <<-\\EOF >expected &&\n'> <'\tfirst line\n'> <'\tsame line\n'> <'\tEOF\n'> 
            <'\n'> <'\tif test_have_prereq NATIVE_CRLF; then\n'> <'\t\tappend_cr <expected >expected.temp &&\n'> 
            <'\t\tmv expected.temp expected\n'> <'\tfi &&\n'> <'\tgit config merge.renormalize true &&\n'> <'\tgit rm -fr . &&\n'> 
            <'\trm -f .gitattributes &&\n'> <'\tgit reset --hard a &&\n'> <'\tgit merge b &&\n'> <'\tcompare_files expected file\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'Merge addition of text=auto eol=LF'>)}
        {
          (SQ <'\n'> <'\tgit config core.eol lf &&\n'> <'\tcat <<-\\EOF >expected &&\n'> 
            <'\tfirst line\n'> <'\tsame line\n'> <'\tEOF\n'> <'\n'> <'\tgit config merge.renormalize true &&\n'> <'\tgit rm -fr . &&\n'> 
            <'\trm -f .gitattributes &&\n'> <'\tgit reset --hard b &&\n'> <'\tgit merge a &&\n'> <'\tcompare_files  expected file\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'Merge addition of text=auto eol=CRLF'>)}
        {
          (SQ <'\n'> <'\tgit config core.eol crlf &&\n'> <'\tcat <<-\\EOF >expected &&\n'> 
            <'\tfirst line\n'> <'\tsame line\n'> <'\tEOF\n'> <'\n'> <'\tappend_cr <expected >expected.temp &&\n'> 
            <'\tmv expected.temp expected &&\n'> <'\tgit config merge.renormalize true &&\n'> <'\tgit rm -fr . &&\n'> <'\trm -f .gitattributes &&\n'> 
            <'\tgit reset --hard b &&\n'> <'\techo >&2 "After git reset --hard b" &&\n'> <'\tgit ls-files -s --eol >&2 &&\n'> 
            <'\tgit merge a &&\n'> <'\tcompare_files  expected file\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'Detect CRLF/LF conflict after setting text=auto'>)}
        {
          (SQ <'\n'> <'\tgit config core.eol native &&\n'> <'\techo "<<<<<<<" >expected &&\n'> 
            <'\techo first line >>expected &&\n'> <'\techo same line >>expected &&\n'> <'\techo ======= >>expected &&\n'> 
            <'\techo first line | append_cr >>expected &&\n'> <'\techo same line | append_cr >>expected &&\n'> <'\techo ">>>>>>>" >>expected &&\n'> 
            <'\tgit config merge.renormalize false &&\n'> <'\trm -f .gitattributes &&\n'> <'\tgit reset --hard a &&\n'> <'\ttest_must_fail git merge b &&\n'> 
            <'\tfuzz_conflict file >file.fuzzy &&\n'> <'\tcompare_files expected file.fuzzy\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'Detect LF/CRLF conflict from addition of text=auto'>)}
        {
          (SQ <'\n'> <'\techo "<<<<<<<" >expected &&\n'> 
            <'\techo first line | append_cr >>expected &&\n'> <'\techo same line | append_cr >>expected &&\n'> <'\techo ======= >>expected &&\n'> 
            <'\techo first line >>expected &&\n'> <'\techo same line >>expected &&\n'> <'\techo ">>>>>>>" >>expected &&\n'> 
            <'\tgit config merge.renormalize false &&\n'> <'\trm -f .gitattributes &&\n'> <'\tgit reset --hard b &&\n'> <'\ttest_must_fail git merge a &&\n'> 
            <'\tfuzz_conflict file >file.fuzzy &&\n'> <'\tcompare_files expected file.fuzzy\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_failure>
      more_env: []
      words: [
        {<test_expect_failure>}
        {(SQ <'checkout -m after setting text=auto'>)}
        {
          (SQ <'\n'> <'\tcat <<-\\EOF >expected &&\n'> <'\tfirst line\n'> <'\tsame line\n'> <'\tEOF\n'> 
            <'\n'> <'\tgit config merge.renormalize true &&\n'> <'\tgit rm -fr . &&\n'> <'\trm -f .gitattributes &&\n'> 
            <'\tgit reset --hard initial &&\n'> <'\tgit checkout a -- . &&\n'> <'\tgit checkout -m b &&\n'> <'\tcompare_files expected file\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_failure>
      more_env: []
      words: [
        {<test_expect_failure>}
        {(SQ <'checkout -m addition of text=auto'>)}
        {
          (SQ <'\n'> <'\tcat <<-\\EOF >expected &&\n'> <'\tfirst line\n'> <'\tsame line\n'> <'\tEOF\n'> 
            <'\n'> <'\tgit config merge.renormalize true &&\n'> <'\tgit rm -fr . &&\n'> 
            <'\trm -f .gitattributes file &&\n'> <'\tgit reset --hard initial &&\n'> <'\tgit checkout b -- . &&\n'> <'\tgit checkout -m a &&\n'> 
            <'\tcompare_files expected file\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_failure>
      more_env: []
      words: [
        {<test_expect_failure>}
        {(SQ <'cherry-pick patch from after text=auto was added'>)}
        {
          (SQ <'\n'> <'\tappend_cr <<-\\EOF >expected &&\n'> <'\tfirst line\n'> <'\tsame line\n'> 
            <'\tEOF\n'> <'\n'> <'\tgit config merge.renormalize true &&\n'> <'\tgit rm -fr . &&\n'> 
            <'\tgit reset --hard b &&\n'> <'\ttest_must_fail git cherry-pick a >err 2>&1 &&\n'> <'\tgrep "[Nn]othing added" err &&\n'> 
            <'\tcompare_files expected file\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'Test delete/normalize conflict'>)}
        {
          (SQ <'\n'> <'\tgit checkout -f side &&\n'> <'\tgit rm -fr . &&\n'> 
            <'\trm -f .gitattributes &&\n'> <'\tgit reset --hard initial &&\n'> <'\tgit rm file &&\n'> <'\tgit commit -m "remove file" &&\n'> 
            <'\tgit checkout master &&\n'> <'\tgit reset --hard a^ &&\n'> <'\tgit merge side\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_done>
      more_env: []
      words: [{<test_done>}]
      redirects: []
      do_fork: T
    )
  ]
)