(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:'more git add -u' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:20) 
          (Token id:Id.Lit_Chars val:'\t>xyzzy &&\n' span_id:21) (Token id:Id.Lit_Chars val:'\t_empty=$(git hash-object --stdin <xyzzy) &&\n' span_id:22) 
          (Token id:Id.Lit_Chars val:'\t>yomin &&\n' span_id:23) (Token id:Id.Lit_Chars val:'\t>caskly &&\n' span_id:24) 
          (Token id:Id.Lit_Chars val:'\tif test_have_prereq SYMLINKS; then\n' span_id:25) (Token id:Id.Lit_Chars val:'\t\tln -s frotz nitfol &&\n' span_id:26) 
          (Token id:Id.Lit_Chars val:'\t\tT_letter=T\n' span_id:27) (Token id:Id.Lit_Chars val:'\telse\n' span_id:28) 
          (Token id:Id.Lit_Chars val:'\t\tprintf %s frotz > nitfol &&\n' span_id:29) (Token id:Id.Lit_Chars val:'\t\tT_letter=M\n' span_id:30) 
          (Token id:Id.Lit_Chars val:'\tfi &&\n' span_id:31) (Token id:Id.Lit_Chars val:'\tmkdir rezrov &&\n' span_id:32) 
          (Token id:Id.Lit_Chars val:'\t>rezrov/bozbar &&\n' span_id:33) (Token id:Id.Lit_Chars val:'\tgit add caskly xyzzy yomin nitfol rezrov/bozbar &&\n' span_id:34) 
          (Token id:Id.Lit_Chars val:'\n' span_id:35) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:36) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m initial\n' span_id:37) (Token id:Id.Lit_Chars val:'\n' span_id:38)
        )
      }
    )
    (C {(test_expect_success)} {(modify)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:47) 
          (Token id:Id.Lit_Chars val:'\trm -f xyzzy yomin nitfol caskly &&\n' span_id:48) (Token id:Id.Lit_Chars val:'\t# caskly disappears (not a submodule)\n' span_id:49) 
          (Token id:Id.Lit_Chars val:'\tmkdir caskly &&\n' span_id:50) (Token id:Id.Lit_Chars val:'\t# nitfol changes from symlink to regular\n' span_id:51) 
          (Token id:Id.Lit_Chars val:'\t>nitfol &&\n' span_id:52) (Token id:Id.Lit_Chars val:'\t# rezrov/bozbar disappears\n' span_id:53) 
          (Token id:Id.Lit_Chars val:'\trm -fr rezrov &&\n' span_id:54) (Token id:Id.Lit_Chars val:'\tif test_have_prereq SYMLINKS; then\n' span_id:55) 
          (Token id:Id.Lit_Chars val:'\t\tln -s xyzzy rezrov\n' span_id:56) (Token id:Id.Lit_Chars val:'\telse\n' span_id:57) 
          (Token id:Id.Lit_Chars val:'\t\tprintf %s xyzzy > rezrov\n' span_id:58) (Token id:Id.Lit_Chars val:'\tfi &&\n' span_id:59) 
          (Token id:Id.Lit_Chars val:'\t# xyzzy disappears (not a submodule)\n' span_id:60) (Token id:Id.Lit_Chars val:'\tmkdir xyzzy &&\n' span_id:61) 
          (Token id:Id.Lit_Chars val:'\techo gnusto >xyzzy/bozbar &&\n' span_id:62) (Token id:Id.Lit_Chars val:'\t# yomin gets replaced with a submodule\n' span_id:63) 
          (Token id:Id.Lit_Chars val:'\tmkdir yomin &&\n' span_id:64) (Token id:Id.Lit_Chars val:'\t>yomin/yomin &&\n' span_id:65) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:66) (Token id:Id.Lit_Chars val:'\t\tcd yomin &&\n' span_id:67) 
          (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:68) (Token id:Id.Lit_Chars val:'\t\tgit add yomin &&\n' span_id:69) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -m "sub initial"\n' span_id:70) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:71) 
          (Token
            id: Id.Lit_Chars
            val: '\tyomin=$(GIT_DIR=yomin/.git git rev-parse HEAD) &&\n'
            span_id: 72
          ) (Token id:Id.Lit_Chars val:'\t# yonk is added and then turned into a submodule\n' span_id:73) 
          (Token
            id: Id.Lit_Chars
            val: '\t# this should appear as T in diff-files and as A in diff-index\n'
            span_id: 74
          ) (Token id:Id.Lit_Chars val:'\t>yonk &&\n' span_id:75) 
          (Token id:Id.Lit_Chars val:'\tgit add yonk &&\n' span_id:76) (Token id:Id.Lit_Chars val:'\trm -f yonk &&\n' span_id:77) 
          (Token id:Id.Lit_Chars val:'\tmkdir yonk &&\n' span_id:78) (Token id:Id.Lit_Chars val:'\t>yonk/yonk &&\n' span_id:79) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:80) (Token id:Id.Lit_Chars val:'\t\tcd yonk &&\n' span_id:81) 
          (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:82) (Token id:Id.Lit_Chars val:'\t\tgit add yonk &&\n' span_id:83) 
          (Token id:Id.Lit_Chars val:'\t\tgit commit -m "sub initial"\n' span_id:84) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:85) 
          (Token
            id: Id.Lit_Chars
            val: '\tyonk=$(GIT_DIR=yonk/.git git rev-parse HEAD) &&\n'
            span_id: 86
          ) (Token id:Id.Lit_Chars val:'\t# zifmia is added and then removed\n' span_id:87) 
          (Token
            id: Id.Lit_Chars
            val: '\t# this should appear in diff-files but not in diff-index.\n'
            span_id: 88
          ) (Token id:Id.Lit_Chars val:'\t>zifmia &&\n' span_id:89) 
          (Token id:Id.Lit_Chars val:'\tgit add zifmia &&\n' span_id:90) (Token id:Id.Lit_Chars val:'\trm -f zifmia &&\n' span_id:91) 
          (Token id:Id.Lit_Chars val:'\tmkdir zifmia &&\n' span_id:92) (Token id:Id.Lit_Chars val:'\t{\n' span_id:93) 
          (Token id:Id.Lit_Chars val:'\t\tgit ls-tree -r HEAD |\n' span_id:94) (Token id:Id.Lit_Chars val:'\t\tsed -e "s/^/:/" -e "\n' span_id:95) 
          (Token id:Id.Lit_Chars val:'\t\t\t/\tcaskly/{\n' span_id:96) (Token id:Id.Lit_Chars val:'\t\t\t\ts/\tcaskly/ $_z40 D&/\n' span_id:97) 
          (Token id:Id.Lit_Chars val:'\t\t\t\ts/blob/000000/\n' span_id:98) (Token id:Id.Lit_Chars val:'\t\t\t}\n' span_id:99) 
          (Token id:Id.Lit_Chars val:'\t\t\t/\tnitfol/{\n' span_id:100) (Token id:Id.Lit_Chars val:'\t\t\t\ts/\tnitfol/ $_z40 $T_letter&/\n' span_id:101) 
          (Token id:Id.Lit_Chars val:'\t\t\t\ts/blob/100644/\n' span_id:102) (Token id:Id.Lit_Chars val:'\t\t\t}\n' span_id:103) 
          (Token id:Id.Lit_Chars val:'\t\t\t/\trezrov.bozbar/{\n' span_id:104) (Token id:Id.Lit_Chars val:'\t\t\t\ts/\trezrov.bozbar/ $_z40 D&/\n' span_id:105) 
          (Token id:Id.Lit_Chars val:'\t\t\t\ts/blob/000000/\n' span_id:106) (Token id:Id.Lit_Chars val:'\t\t\t}\n' span_id:107) 
          (Token id:Id.Lit_Chars val:'\t\t\t/\txyzzy/{\n' span_id:108) (Token id:Id.Lit_Chars val:'\t\t\t\ts/\txyzzy/ $_z40 D&/\n' span_id:109) 
          (Token id:Id.Lit_Chars val:'\t\t\t\ts/blob/000000/\n' span_id:110) (Token id:Id.Lit_Chars val:'\t\t\t}\n' span_id:111) 
          (Token id:Id.Lit_Chars val:'\t\t\t/\tyomin/{\n' span_id:112) (Token id:Id.Lit_Chars val:'\t\t\t    s/\tyomin/ $_z40 T&/\n' span_id:113) 
          (Token id:Id.Lit_Chars val:'\t\t\t\ts/blob/160000/\n' span_id:114) (Token id:Id.Lit_Chars val:'\t\t\t}\n' span_id:115) (Token id:Id.Lit_Chars val:'\t\t"\n' span_id:116) 
          (Token id:Id.Lit_Chars val:'\t} >expect &&\n' span_id:117) (Token id:Id.Lit_Chars val:'\t{\n' span_id:118) 
          (Token id:Id.Lit_Chars val:'\t\tcat expect\n' span_id:119) (Token id:Id.Lit_Chars val:'\t\techo ":100644 160000 $_empty $_z40 T\tyonk"\n' span_id:120) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo ":100644 000000 $_empty $_z40 D\tzifmia"\n'
            span_id: 121
          ) (Token id:Id.Lit_Chars val:'\t} >expect-files &&\n' span_id:122) 
          (Token id:Id.Lit_Chars val:'\t{\n' span_id:123) (Token id:Id.Lit_Chars val:'\t\tcat expect\n' span_id:124) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo ":000000 160000 $_z40 $_z40 A\tyonk"\n'
            span_id: 125
          ) (Token id:Id.Lit_Chars val:'\t} >expect-index &&\n' span_id:126) 
          (Token id:Id.Lit_Chars val:'\t{\n' span_id:127) (Token id:Id.Lit_Chars val:'\t\techo "100644 $_empty 0\tnitfol"\n' span_id:128) 
          (Token id:Id.Lit_Chars val:'\t\techo "160000 $yomin 0\tyomin"\n' span_id:129) (Token id:Id.Lit_Chars val:'\t\techo "160000 $yonk 0\tyonk"\n' span_id:130) 
          (Token id:Id.Lit_Chars val:'\t} >expect-final\n' span_id:131)
        )
      }
    )
    (C {(test_expect_success)} {(diff-files)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:140) 
          (Token id:Id.Lit_Chars val:'\tgit diff-files --raw >actual &&\n' span_id:141) (Token id:Id.Lit_Chars val:'\ttest_cmp expect-files actual\n' span_id:142)
        )
      }
    )
    (C {(test_expect_success)} {(diff-index)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:151) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-index --raw HEAD -- >actual &&\n'
            span_id: 152
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect-index actual\n' span_id:153)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'add -u' span_id:160))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:164) 
          (Token id:Id.Lit_Chars val:'\trm -f ".git/saved-index" &&\n' span_id:165) (Token id:Id.Lit_Chars val:'\tcp -p ".git/index" ".git/saved-index" &&\n' span_id:166) 
          (Token id:Id.Lit_Chars val:'\tgit add -u &&\n' span_id:167) (Token id:Id.Lit_Chars val:'\tgit ls-files -s >actual &&\n' span_id:168) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect-final actual\n' span_id:169)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit -a' span_id:176))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:180) 
          (Token id:Id.Lit_Chars val:'\tif test -f ".git/saved-index"\n' span_id:181) (Token id:Id.Lit_Chars val:'\tthen\n' span_id:182) 
          (Token id:Id.Lit_Chars val:'\t\trm -f ".git/index" &&\n' span_id:183) (Token id:Id.Lit_Chars val:'\t\tmv ".git/saved-index" ".git/index"\n' span_id:184) 
          (Token id:Id.Lit_Chars val:'\tfi &&\n' span_id:185) (Token id:Id.Lit_Chars val:'\tgit commit -m "second" -a &&\n' span_id:186) 
          (Token id:Id.Lit_Chars val:'\tgit ls-files -s >actual &&\n' span_id:187) (Token id:Id.Lit_Chars val:'\ttest_cmp expect-final actual &&\n' span_id:188) 
          (Token id:Id.Lit_Chars val:'\trm -f .git/index &&\n' span_id:189) (Token id:Id.Lit_Chars val:'\tgit read-tree HEAD &&\n' span_id:190) 
          (Token id:Id.Lit_Chars val:'\tgit ls-files -s >actual &&\n' span_id:191) (Token id:Id.Lit_Chars val:'\ttest_cmp expect-final actual\n' span_id:192)
        )
      }
    )
    (C {(test_done)})
  ]
)