(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: 'merging when a directory was replaced with a symlink'
                  span_id: 6
                )
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'create a commit where dir a/b changed to symlink' span_id:17))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:21) 
          (Token id:Id.Lit_Chars val:'\tmkdir -p a/b/c a/b-2/c &&\n' span_id:22) (Token id:Id.Lit_Chars val:'\t> a/b/c/d &&\n' span_id:23) 
          (Token id:Id.Lit_Chars val:'\t> a/b-2/c/d &&\n' span_id:24) (Token id:Id.Lit_Chars val:'\t> a/x &&\n' span_id:25) 
          (Token id:Id.Lit_Chars val:'\tgit add -A &&\n' span_id:26) (Token id:Id.Lit_Chars val:'\tgit commit -m base &&\n' span_id:27) 
          (Token id:Id.Lit_Chars val:'\tgit tag start &&\n' span_id:28) (Token id:Id.Lit_Chars val:'\trm -rf a/b &&\n' span_id:29) 
          (Token id:Id.Lit_Chars val:'\tgit add -A &&\n' span_id:30) (Token id:Id.Lit_Chars val:'\ttest_ln_s_add b-2 a/b &&\n' span_id:31) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "dir to symlink"\n' span_id:32)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout does not clobber untracked symlink' span_id:39))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:43) 
          (Token id:Id.Lit_Chars val:'\tgit checkout HEAD^0 &&\n' span_id:44) (Token id:Id.Lit_Chars val:'\tgit reset --hard master &&\n' span_id:45) 
          (Token id:Id.Lit_Chars val:'\tgit rm --cached a/b &&\n' span_id:46) (Token id:Id.Lit_Chars val:'\tgit commit -m "untracked symlink remains" &&\n' span_id:47) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git checkout start^0\n' span_id:48)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'a/b-2/c/d is kept when clobbering symlink b' span_id:55))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:59) 
          (Token id:Id.Lit_Chars val:'\tgit checkout HEAD^0 &&\n' span_id:60) (Token id:Id.Lit_Chars val:'\tgit reset --hard master &&\n' span_id:61) 
          (Token id:Id.Lit_Chars val:'\tgit rm --cached a/b &&\n' span_id:62) (Token id:Id.Lit_Chars val:'\tgit commit -m "untracked symlink remains" &&\n' span_id:63) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -f start^0 &&\n' span_id:64) (Token id:Id.Lit_Chars val:'\ttest -f a/b-2/c/d\n' span_id:65)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout should not have deleted a/b-2/c/d' span_id:72))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:76) 
          (Token id:Id.Lit_Chars val:'\tgit checkout HEAD^0 &&\n' span_id:77) (Token id:Id.Lit_Chars val:'\tgit reset --hard master &&\n' span_id:78) 
          (Token id:Id.Lit_Chars val:'\t git checkout start^0 &&\n' span_id:79) (Token id:Id.Lit_Chars val:'\t test -f a/b-2/c/d\n' span_id:80)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup for merge test' span_id:87))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:91) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:92) (Token id:Id.Lit_Chars val:'\ttest -f a/b-2/c/d &&\n' span_id:93) 
          (Token id:Id.Lit_Chars val:'\techo x > a/x &&\n' span_id:94) (Token id:Id.Lit_Chars val:'\tgit add a/x &&\n' span_id:95) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m x &&\n' span_id:96) (Token id:Id.Lit_Chars val:'\tgit tag baseline\n' span_id:97)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Handle D/F conflict, do not lose a/b-2/c/d in merge (resolve)'
            span_id: 104
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:108) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:109) (Token id:Id.Lit_Chars val:'\tgit checkout baseline^0 &&\n' span_id:110) 
          (Token id:Id.Lit_Chars val:'\tgit merge -s resolve master &&\n' span_id:111) (Token id:Id.Lit_Chars val:'\ttest -f a/b-2/c/d\n' span_id:112)
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {(SQ (Token id:Id.Lit_Chars val:'a/b was resolved as symlink' span_id:121))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:125) 
          (Token id:Id.Lit_Chars val:'\ttest -h a/b\n' span_id:126)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Handle D/F conflict, do not lose a/b-2/c/d in merge (recursive)'
            span_id: 133
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:137) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:138) (Token id:Id.Lit_Chars val:'\tgit checkout baseline^0 &&\n' span_id:139) 
          (Token id:Id.Lit_Chars val:'\tgit merge -s recursive master &&\n' span_id:140) (Token id:Id.Lit_Chars val:'\ttest -f a/b-2/c/d\n' span_id:141)
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {(SQ (Token id:Id.Lit_Chars val:'a/b was resolved as symlink' span_id:150))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:154) 
          (Token id:Id.Lit_Chars val:'\ttest -h a/b\n' span_id:155)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Handle F/D conflict, do not lose a/b-2/c/d in merge (resolve)'
            span_id: 162
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:166) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:167) (Token id:Id.Lit_Chars val:'\tgit checkout master^0 &&\n' span_id:168) 
          (Token id:Id.Lit_Chars val:'\tgit merge -s resolve baseline^0 &&\n' span_id:169) (Token id:Id.Lit_Chars val:'\ttest -f a/b-2/c/d\n' span_id:170)
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {(SQ (Token id:Id.Lit_Chars val:'a/b was resolved as symlink' span_id:179))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:183) 
          (Token id:Id.Lit_Chars val:'\ttest -h a/b\n' span_id:184)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Handle F/D conflict, do not lose a/b-2/c/d in merge (recursive)'
            span_id: 191
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:195) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:196) (Token id:Id.Lit_Chars val:'\tgit checkout master^0 &&\n' span_id:197) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit merge -s recursive baseline^0 &&\n'
            span_id: 198
          ) (Token id:Id.Lit_Chars val:'\ttest -f a/b-2/c/d\n' span_id:199)
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {(SQ (Token id:Id.Lit_Chars val:'a/b was resolved as symlink' span_id:208))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:212) 
          (Token id:Id.Lit_Chars val:'\ttest -h a/b\n' span_id:213)
        )
      }
    )
    (C {(test_expect_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'do not lose untracked in merge (resolve)' span_id:220))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:224) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:225) (Token id:Id.Lit_Chars val:'\tgit checkout baseline^0 &&\n' span_id:226) 
          (Token id:Id.Lit_Chars val:'\t>a/b/c/e &&\n' span_id:227) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge -s resolve master &&\n' span_id:228) 
          (Token id:Id.Lit_Chars val:'\ttest -f a/b/c/e &&\n' span_id:229) (Token id:Id.Lit_Chars val:'\ttest -f a/b-2/c/d\n' span_id:230)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'do not lose untracked in merge (recursive)' span_id:237))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:241) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:242) (Token id:Id.Lit_Chars val:'\tgit checkout baseline^0 &&\n' span_id:243) 
          (Token id:Id.Lit_Chars val:'\t>a/b/c/e &&\n' span_id:244) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge -s recursive master &&\n' span_id:245) 
          (Token id:Id.Lit_Chars val:'\ttest -f a/b/c/e &&\n' span_id:246) (Token id:Id.Lit_Chars val:'\ttest -f a/b-2/c/d\n' span_id:247)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'do not lose modifications in merge (resolve)' span_id:254))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:258) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:259) (Token id:Id.Lit_Chars val:'\tgit checkout baseline^0 &&\n' span_id:260) 
          (Token id:Id.Lit_Chars val:'\techo more content >>a/b/c/d &&\n' span_id:261) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge -s resolve master\n' span_id:262)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'do not lose modifications in merge (recursive)' span_id:269))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:273) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:274) (Token id:Id.Lit_Chars val:'\tgit checkout baseline^0 &&\n' span_id:275) 
          (Token id:Id.Lit_Chars val:'\techo more content >>a/b/c/d &&\n' span_id:276) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge -s recursive master\n' span_id:277)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'setup a merge where dir a/b-2 changed to symlink'
            span_id: 284
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:288) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:289) (Token id:Id.Lit_Chars val:'\tgit checkout start^0 &&\n' span_id:290) 
          (Token id:Id.Lit_Chars val:'\trm -rf a/b-2 &&\n' span_id:291) (Token id:Id.Lit_Chars val:'\tgit add -A &&\n' span_id:292) 
          (Token id:Id.Lit_Chars val:'\ttest_ln_s_add b a/b-2 &&\n' span_id:293) (Token id:Id.Lit_Chars val:'\tgit commit -m "dir a/b-2 to symlink" &&\n' span_id:294) 
          (Token id:Id.Lit_Chars val:'\tgit tag test2\n' span_id:295)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge should not have D/F conflicts (resolve)' span_id:302))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:306) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:307) (Token id:Id.Lit_Chars val:'\tgit checkout baseline^0 &&\n' span_id:308) 
          (Token id:Id.Lit_Chars val:'\tgit merge -s resolve test2 &&\n' span_id:309) (Token id:Id.Lit_Chars val:'\ttest -f a/b/c/d\n' span_id:310)
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {(SQ (Token id:Id.Lit_Chars val:'a/b-2 was resolved as symlink' span_id:319))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:323) 
          (Token id:Id.Lit_Chars val:'\ttest -h a/b-2\n' span_id:324)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge should not have D/F conflicts (recursive)' span_id:331))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:335) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:336) (Token id:Id.Lit_Chars val:'\tgit checkout baseline^0 &&\n' span_id:337) 
          (Token id:Id.Lit_Chars val:'\tgit merge -s recursive test2 &&\n' span_id:338) (Token id:Id.Lit_Chars val:'\ttest -f a/b/c/d\n' span_id:339)
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {(SQ (Token id:Id.Lit_Chars val:'a/b-2 was resolved as symlink' span_id:348))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:352) 
          (Token id:Id.Lit_Chars val:'\ttest -h a/b-2\n' span_id:353)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge should not have F/D conflicts (recursive)' span_id:360))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:364) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:365) (Token id:Id.Lit_Chars val:'\tgit checkout -b foo test2 &&\n' span_id:366) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit merge -s recursive baseline^0 &&\n'
            span_id: 367
          ) (Token id:Id.Lit_Chars val:'\ttest -f a/b/c/d\n' span_id:368)
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {(SQ (Token id:Id.Lit_Chars val:'a/b-2 was resolved as symlink' span_id:377))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:381) 
          (Token id:Id.Lit_Chars val:'\ttest -h a/b-2\n' span_id:382)
        )
      }
    )
    (C {(test_done)})
  ]
)