(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          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">
              )
            }
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (AndOr
      children: [
        (C {(test_have_prereq)} {(SED_STRIPS_CR)})
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:SED_OPTIONS) op:Equal rhs:{(-b)} spids:[30])]
          spids: [30]
        )
      ]
      op_id: Op_DAmp
    )
    (FuncDef
      name: compare_files
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (SimpleCommand
                  words: [{(tr)} {(SQ <"\\015\\000">)} {(QN)}]
                  redirects: [
                    (Redir
                      op_id: Redir_Less
                      fd: -1
                      arg_word: {(DQ ($ VSub_Number "$1"))}
                      spids: [50]
                    )
                    (Redir
                      op_id: Redir_Great
                      fd: -1
                      arg_word: {(DQ ($ VSub_Number "$1")) (.expect)}
                      spids: [55]
                    )
                  ]
                )
                (AndOr
                  children: [
                    (SimpleCommand
                      words: [{(tr)} {(SQ <"\\015\\000">)} {(QN)}]
                      redirects: [
                        (Redir
                          op_id: Redir_Less
                          fd: -1
                          arg_word: {(DQ ($ VSub_Number "$2"))}
                          spids: [72]
                        )
                        (Redir
                          op_id: Redir_Great
                          fd: -1
                          arg_word: {(DQ ($ VSub_Number "$2")) (.actual)}
                          spids: [77]
                        )
                      ]
                    )
                    (AndOr
                      children: [
                        (C {(test_cmp)} {(DQ ($ VSub_Number "$1")) (.expect)} 
                          {(DQ ($ VSub_Number "$2")) (.actual)}
                        )
                        (C {(rm)} {(DQ ($ VSub_Number "$1")) (.expect)} 
                          {(DQ ($ VSub_Number "$2")) (.actual)}
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [39]
        )
      spids: [34 38]
    )
    (C {(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">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"set up fuzz_conflict() helper">)} 
      {
        (SQ <"\n"> <"\tfuzz_conflict() {\n"> 
          <"\t\tsed $SED_OPTIONS -e \"s/^\\([<>=]......\\) .*/\\1/\" \"$@\"\n"> <"\t}\n">
        )
      }
    )
    (C {(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">
        )
      }
    )
    (C {(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">
        )
      }
    )
    (C {(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">
        )
      }
    )
    (C {(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">
        )
      }
    )
    (C {(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">
        )
      }
    )
    (C {(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">
        )
      }
    )
    (C {(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">
        )
      }
    )
    (C {(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">
        )
      }
    )
    (C {(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">
        )
      }
    )
    (C {(test_done)})
  ]
)