(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'Test merge with directory/file conflicts'>)}
          spids: [13]
        )
      ]
      spids: [13]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ <'prepare repository'>)} 
      {
        (SQ <'\n'> <'\techo Hello >init &&\n'> <'\tgit add init &&\n'> <'\tgit commit -m initial &&\n'> 
          <'\n'> <'\tgit branch B &&\n'> <'\tmkdir dir &&\n'> <'\techo foo >dir/foo &&\n'> <'\tgit add dir/foo &&\n'> 
          <'\tgit commit -m "File: dir/foo" &&\n'> <'\n'> <'\tgit checkout B &&\n'> <'\techo file dir >dir &&\n'> <'\tgit add dir &&\n'> 
          <'\tgit commit -m "File: dir"\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'Merge with d/f conflicts'>)} 
      {(SQ <'\n'> <'\ttest_expect_code 1 git merge -m "merge msg" master\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'F/D conflict'>)} 
      {
        (SQ <'\n'> <'\tgit reset --hard &&\n'> <'\tgit checkout master &&\n'> <'\trm .git/index &&\n'> 
          <'\n'> <'\tmkdir before &&\n'> <'\techo FILE >before/one &&\n'> <'\techo FILE >after &&\n'> 
          <'\tgit add . &&\n'> <'\tgit commit -m first &&\n'> <'\n'> <'\trm -f after &&\n'> <'\tgit mv before after &&\n'> 
          <'\tgit commit -m move &&\n'> <'\n'> <'\tgit checkout -b para HEAD^ &&\n'> <'\techo COMPLETELY ANOTHER FILE >another &&\n'> 
          <'\tgit add . &&\n'> <'\tgit commit -m para &&\n'> <'\n'> <'\tgit merge master\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'setup modify/delete + directory/file conflict'>)} 
      {
        (SQ <'\n'> <'\tgit checkout --orphan modify &&\n'> <'\tgit rm -rf . &&\n'> 
          <'\tgit clean -fdqx &&\n'> <'\n'> <'\tprintf "a\\nb\\nc\\nd\\ne\\nf\\ng\\nh\\n" >letters &&\n'> <'\tgit add letters &&\n'> 
          <'\tgit commit -m initial &&\n'> <'\n'> <'\t# Throw in letters.txt for sorting order fun\n'> 
          <'\t# ("letters.txt" sorts between "letters" and "letters/file")\n'> <'\techo i >>letters &&\n'> <'\techo "version 2" >letters.txt &&\n'> 
          <'\tgit add letters letters.txt &&\n'> <'\tgit commit -m modified &&\n'> <'\n'> <'\tgit checkout -b delete HEAD^ &&\n'> 
          <'\tgit rm letters &&\n'> <'\tmkdir letters &&\n'> <'\t>letters/file &&\n'> <'\techo "version 1" >letters.txt &&\n'> 
          <'\tgit add letters letters.txt &&\n'> <'\tgit commit -m deleted\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'modify/delete + directory/file conflict'>)} 
      {
        (SQ <'\n'> <'\tgit checkout delete^0 &&\n'> <'\ttest_must_fail git merge modify &&\n'> <'\n'> 
          <'\ttest 5 -eq $(git ls-files -s | wc -l) &&\n'> <'\ttest 4 -eq $(git ls-files -u | wc -l) &&\n'> <'\ttest 1 -eq $(git ls-files -o | wc -l) &&\n'> 
          <'\n'> <'\ttest -f letters/file &&\n'> <'\ttest -f letters.txt &&\n'> <'\ttest -f letters~modify\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'modify/delete + directory/file conflict; other way'>)} 
      {
        (SQ <'\n'> <'\t# Yes, we really need the double reset since "letters" appears as\n'> 
          <'\t# both a file and a directory.\n'> <'\tgit reset --hard &&\n'> <'\tgit reset --hard &&\n'> <'\tgit clean -f &&\n'> 
          <'\tgit checkout modify^0 &&\n'> <'\n'> <'\ttest_must_fail git merge delete &&\n'> <'\n'> 
          <'\ttest 5 -eq $(git ls-files -s | wc -l) &&\n'> <'\ttest 4 -eq $(git ls-files -u | wc -l) &&\n'> <'\ttest 1 -eq $(git ls-files -o | wc -l) &&\n'> 
          <'\n'> <'\ttest -f letters/file &&\n'> <'\ttest -f letters.txt &&\n'> <'\ttest -f letters~HEAD\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)