(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'Test merge with directory/file conflicts' span_id:15))}
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'prepare repository' span_id:26))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:30) 
          (Token id:Id.Lit_Chars val:'\techo Hello >init &&\n' span_id:31) (Token id:Id.Lit_Chars val:'\tgit add init &&\n' span_id:32) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:33) (Token id:Id.Lit_Chars val:'\n' span_id:34) 
          (Token id:Id.Lit_Chars val:'\tgit branch B &&\n' span_id:35) (Token id:Id.Lit_Chars val:'\tmkdir dir &&\n' span_id:36) 
          (Token id:Id.Lit_Chars val:'\techo foo >dir/foo &&\n' span_id:37) (Token id:Id.Lit_Chars val:'\tgit add dir/foo &&\n' span_id:38) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "File: dir/foo" &&\n' span_id:39) (Token id:Id.Lit_Chars val:'\n' span_id:40) 
          (Token id:Id.Lit_Chars val:'\tgit checkout B &&\n' span_id:41) (Token id:Id.Lit_Chars val:'\techo file dir >dir &&\n' span_id:42) 
          (Token id:Id.Lit_Chars val:'\tgit add dir &&\n' span_id:43) (Token id:Id.Lit_Chars val:'\tgit commit -m "File: dir"\n' span_id:44)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Merge with d/f conflicts' span_id:51))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:55) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_expect_code 1 git merge -m "merge msg" master\n'
            span_id: 56
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'F/D conflict' span_id:63))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:67) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:68) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:69) 
          (Token id:Id.Lit_Chars val:'\trm .git/index &&\n' span_id:70) (Token id:Id.Lit_Chars val:'\n' span_id:71) 
          (Token id:Id.Lit_Chars val:'\tmkdir before &&\n' span_id:72) (Token id:Id.Lit_Chars val:'\techo FILE >before/one &&\n' span_id:73) 
          (Token id:Id.Lit_Chars val:'\techo FILE >after &&\n' span_id:74) (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:75) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m first &&\n' span_id:76) (Token id:Id.Lit_Chars val:'\n' span_id:77) 
          (Token id:Id.Lit_Chars val:'\trm -f after &&\n' span_id:78) (Token id:Id.Lit_Chars val:'\tgit mv before after &&\n' span_id:79) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m move &&\n' span_id:80) (Token id:Id.Lit_Chars val:'\n' span_id:81) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b para HEAD^ &&\n' span_id:82) (Token id:Id.Lit_Chars val:'\techo COMPLETELY ANOTHER FILE >another &&\n' span_id:83) 
          (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:84) (Token id:Id.Lit_Chars val:'\tgit commit -m para &&\n' span_id:85) 
          (Token id:Id.Lit_Chars val:'\n' span_id:86) (Token id:Id.Lit_Chars val:'\tgit merge master\n' span_id:87)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'setup modify/delete + directory/file conflict' span_id:94))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:98) 
          (Token id:Id.Lit_Chars val:'\tgit checkout --orphan modify &&\n' span_id:99) (Token id:Id.Lit_Chars val:'\tgit rm -rf . &&\n' span_id:100) 
          (Token id:Id.Lit_Chars val:'\tgit clean -fdqx &&\n' span_id:101) (Token id:Id.Lit_Chars val:'\n' span_id:102) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "a\\nb\\nc\\nd\\ne\\nf\\ng\\nh\\n" >letters &&\n'
            span_id: 103
          ) (Token id:Id.Lit_Chars val:'\tgit add letters &&\n' span_id:104) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:105) (Token id:Id.Lit_Chars val:'\n' span_id:106) 
          (Token
            id: Id.Lit_Chars
            val: '\t# Throw in letters.txt for sorting order fun\n'
            span_id: 107
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t# ("letters.txt" sorts between "letters" and "letters/file")\n'
            span_id: 108
          ) (Token id:Id.Lit_Chars val:'\techo i >>letters &&\n' span_id:109) 
          (Token id:Id.Lit_Chars val:'\techo "version 2" >letters.txt &&\n' span_id:110) (Token id:Id.Lit_Chars val:'\tgit add letters letters.txt &&\n' span_id:111) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m modified &&\n' span_id:112) (Token id:Id.Lit_Chars val:'\n' span_id:113) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b delete HEAD^ &&\n' span_id:114) (Token id:Id.Lit_Chars val:'\tgit rm letters &&\n' span_id:115) 
          (Token id:Id.Lit_Chars val:'\tmkdir letters &&\n' span_id:116) (Token id:Id.Lit_Chars val:'\t>letters/file &&\n' span_id:117) 
          (Token id:Id.Lit_Chars val:'\techo "version 1" >letters.txt &&\n' span_id:118) (Token id:Id.Lit_Chars val:'\tgit add letters letters.txt &&\n' span_id:119) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m deleted\n' span_id:120)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'modify/delete + directory/file conflict' span_id:127))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:131) 
          (Token id:Id.Lit_Chars val:'\tgit checkout delete^0 &&\n' span_id:132) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge modify &&\n' span_id:133) 
          (Token id:Id.Lit_Chars val:'\n' span_id:134) (Token id:Id.Lit_Chars val:'\ttest 5 -eq $(git ls-files -s | wc -l) &&\n' span_id:135) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest 4 -eq $(git ls-files -u | wc -l) &&\n'
            span_id: 136
          ) (Token id:Id.Lit_Chars val:'\ttest 1 -eq $(git ls-files -o | wc -l) &&\n' span_id:137) 
          (Token id:Id.Lit_Chars val:'\n' span_id:138) (Token id:Id.Lit_Chars val:'\ttest -f letters/file &&\n' span_id:139) 
          (Token id:Id.Lit_Chars val:'\ttest -f letters.txt &&\n' span_id:140) (Token id:Id.Lit_Chars val:'\ttest -f letters~modify\n' span_id:141)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'modify/delete + directory/file conflict; other way'
            span_id: 148
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:152) 
          (Token
            id: Id.Lit_Chars
            val: '\t# Yes, we really need the double reset since "letters" appears as\n'
            span_id: 153
          ) (Token id:Id.Lit_Chars val:'\t# both a file and a directory.\n' span_id:154) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:155) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:156) 
          (Token id:Id.Lit_Chars val:'\tgit clean -f &&\n' span_id:157) (Token id:Id.Lit_Chars val:'\tgit checkout modify^0 &&\n' span_id:158) 
          (Token id:Id.Lit_Chars val:'\n' span_id:159) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge delete &&\n' span_id:160) 
          (Token id:Id.Lit_Chars val:'\n' span_id:161) (Token id:Id.Lit_Chars val:'\ttest 5 -eq $(git ls-files -s | wc -l) &&\n' span_id:162) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest 4 -eq $(git ls-files -u | wc -l) &&\n'
            span_id: 163
          ) (Token id:Id.Lit_Chars val:'\ttest 1 -eq $(git ls-files -o | wc -l) &&\n' span_id:164) 
          (Token id:Id.Lit_Chars val:'\n' span_id:165) (Token id:Id.Lit_Chars val:'\ttest -f letters/file &&\n' span_id:166) 
          (Token id:Id.Lit_Chars val:'\ttest -f letters.txt &&\n' span_id:167) (Token id:Id.Lit_Chars val:'\ttest -f letters~HEAD\n' span_id:168)
        )
      }
    )
    (C {(test_done)})
  ]
)