(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:'checkout $tree -- $paths' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:19) 
          (Token id:Id.Lit_Chars val:'\tmkdir dir &&\n' span_id:20) (Token id:Id.Lit_Chars val:'\t>dir/master &&\n' span_id:21) 
          (Token id:Id.Lit_Chars val:'\techo common >dir/common &&\n' span_id:22) (Token id:Id.Lit_Chars val:'\tgit add dir/master dir/common &&\n' span_id:23) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_tick && git commit -m "master has dir/master" &&\n'
            span_id: 24
          ) (Token id:Id.Lit_Chars val:'\tgit checkout -b next &&\n' span_id:25) 
          (Token id:Id.Lit_Chars val:'\tgit mv dir/master dir/next0 &&\n' span_id:26) (Token id:Id.Lit_Chars val:'\techo next >dir/next1 &&\n' span_id:27) 
          (Token id:Id.Lit_Chars val:'\tgit add dir &&\n' span_id:28) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_tick && git commit -m "next has dir/next but not dir/master"\n'
            span_id: 29
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'checking out paths out of a tree does not clobber unrelated paths'
            span_id: 36
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:40) 
          (Token id:Id.Lit_Chars val:'\tgit checkout next &&\n' span_id:41) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:42) 
          (Token id:Id.Lit_Chars val:'\trm dir/next0 &&\n' span_id:43) (Token id:Id.Lit_Chars val:'\tcat dir/common >expect.common &&\n' span_id:44) 
          (Token id:Id.Lit_Chars val:'\techo modified >expect.next1 &&\n' span_id:45) (Token id:Id.Lit_Chars val:'\tcat expect.next1 >dir/next1 &&\n' span_id:46) 
          (Token id:Id.Lit_Chars val:'\techo untracked >expect.next2 &&\n' span_id:47) (Token id:Id.Lit_Chars val:'\tcat expect.next2 >dir/next2 &&\n' span_id:48) 
          (Token id:Id.Lit_Chars val:'\n' span_id:49) (Token id:Id.Lit_Chars val:'\tgit checkout master dir &&\n' span_id:50) 
          (Token id:Id.Lit_Chars val:'\n' span_id:51) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.common dir/common &&\n' span_id:52) 
          (Token id:Id.Lit_Chars val:'\ttest_path_is_file dir/master &&\n' span_id:53) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code master dir/master &&\n' span_id:54) 
          (Token id:Id.Lit_Chars val:'\n' span_id:55) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing dir/next0 &&\n' span_id:56) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect.next1 dir/next1 &&\n' span_id:57) (Token id:Id.Lit_Chars val:'\ttest_path_is_file dir/next2 &&\n' span_id:58) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git ls-files --error-unmatch dir/next2 &&\n'
            span_id: 59
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.next2 dir/next2\n' span_id:60)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'do not touch unmerged entries matching $path but not in $tree'
            span_id: 67
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:71) 
          (Token id:Id.Lit_Chars val:'\tgit checkout next &&\n' span_id:72) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:73) 
          (Token id:Id.Lit_Chars val:'\n' span_id:74) (Token id:Id.Lit_Chars val:'\tcat dir/common >expect.common &&\n' span_id:75) 
          (Token
            id: Id.Lit_Chars
            val: '\tEMPTY_SHA1=$(git hash-object -w --stdin </dev/null) &&\n'
            span_id: 76
          ) (Token id:Id.Lit_Chars val:'\tgit rm dir/next0 &&\n' span_id:77) 
          (Token id:Id.Lit_Chars val:'\tcat >expect.next0 <<-EOF &&\n' span_id:78) (Token id:Id.Lit_Chars val:'\t100644 $EMPTY_SHA1 1\tdir/next0\n' span_id:79) 
          (Token id:Id.Lit_Chars val:'\t100644 $EMPTY_SHA1 2\tdir/next0\n' span_id:80) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:81) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-index --index-info <expect.next0 &&\n'
            span_id: 82
          ) (Token id:Id.Lit_Chars val:'\n' span_id:83) 
          (Token id:Id.Lit_Chars val:'\tgit checkout master dir &&\n' span_id:84) (Token id:Id.Lit_Chars val:'\n' span_id:85) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect.common dir/common &&\n' span_id:86) (Token id:Id.Lit_Chars val:'\ttest_path_is_file dir/master &&\n' span_id:87) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --exit-code master dir/master &&\n'
            span_id: 88
          ) (Token id:Id.Lit_Chars val:'\tgit ls-files -s dir/next0 >actual.next0 &&\n' span_id:89) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect.next0 actual.next0\n' span_id:90)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'do not touch files that are already up-to-date' span_id:97))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:101) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:102) (Token id:Id.Lit_Chars val:'\techo one >file1 &&\n' span_id:103) 
          (Token id:Id.Lit_Chars val:'\techo two >file2 &&\n' span_id:104) (Token id:Id.Lit_Chars val:'\tgit add file1 file2 &&\n' span_id:105) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m base &&\n' span_id:106) (Token id:Id.Lit_Chars val:'\techo modified >file1 &&\n' span_id:107) 
          (Token id:Id.Lit_Chars val:'\ttest-chmtime =1000000000 file2 &&\n' span_id:108) (Token id:Id.Lit_Chars val:'\tgit update-index -q --refresh &&\n' span_id:109) 
          (Token id:Id.Lit_Chars val:'\tgit checkout HEAD -- file1 file2 &&\n' span_id:110) (Token id:Id.Lit_Chars val:'\techo one >expect &&\n' span_id:111) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect file1 &&\n' span_id:112) (Token id:Id.Lit_Chars val:'\techo "1000000000\tfile2" >expect &&\n' span_id:113) 
          (Token id:Id.Lit_Chars val:'\ttest-chmtime -v +0 file2 >actual &&\n' span_id:114) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:115)
        )
      }
    )
    (C {(test_done)})
  ]
)