(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:'Basic subproject functionality' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'setup: create superproject' span_id:17))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:21) 
          (Token id:Id.Lit_Chars val:'\t: >Makefile &&\n' span_id:22) (Token id:Id.Lit_Chars val:'\tgit add Makefile &&\n' span_id:23) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "Superproject created"\n' span_id:24)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup: create subprojects' span_id:31))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:35) 
          (Token id:Id.Lit_Chars val:'\tmkdir sub1 &&\n' span_id:36) (Token id:Id.Lit_Chars val:'\t( cd sub1 && git init && : >Makefile && git add * &&\n' span_id:37) 
          (Token id:Id.Lit_Chars val:'\tgit commit -q -m "subproject 1" ) &&\n' span_id:38) (Token id:Id.Lit_Chars val:'\tmkdir sub2 &&\n' span_id:39) 
          (Token
            id: Id.Lit_Chars
            val: '\t( cd sub2 && git init && : >Makefile && git add * &&\n'
            span_id: 40
          ) (Token id:Id.Lit_Chars val:'\tgit commit -q -m "subproject 2" ) &&\n' span_id:41) 
          (Token id:Id.Lit_Chars val:'\tgit update-index --add sub1 &&\n' span_id:42) (Token id:Id.Lit_Chars val:'\tgit add sub2 &&\n' span_id:43) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -q -m "subprojects added" &&\n'
            span_id: 44
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-tree --abbrev=5 HEAD^ HEAD |cut -d" " -f-3,5- >current &&\n'
            span_id: 45
          ) (Token id:Id.Lit_Chars val:'\tgit branch save HEAD &&\n' span_id:46) 
          (Token id:Id.Lit_Chars val:'\tcat >expected <<-\\EOF &&\n' span_id:47) (Token id:Id.Lit_Chars val:'\t:000000 160000 00000... A\tsub1\n' span_id:48) 
          (Token id:Id.Lit_Chars val:'\t:000000 160000 00000... A\tsub2\n' span_id:49) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:50) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected current\n' span_id:51)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check if fsck ignores the subprojects' span_id:58))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:62) 
          (Token id:Id.Lit_Chars val:'\tgit fsck --full\n' span_id:63)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check if commit in a subproject detected' span_id:70))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:74) 
          (Token id:Id.Lit_Chars val:'\t( cd sub1 &&\n' span_id:75) (Token id:Id.Lit_Chars val:'\techo "all:" >>Makefile &&\n' span_id:76) 
          (Token id:Id.Lit_Chars val:'\techo "\ttrue" >>Makefile &&\n' span_id:77) (Token id:Id.Lit_Chars val:'\tgit commit -q -a -m "make all" ) &&\n' span_id:78) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_expect_code 1 git diff-files --exit-code\n'
            span_id: 79
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'check if a changed subproject HEAD can be committed'
            span_id: 86
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:90) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -q -a -m "sub1 changed" &&\n'
            span_id: 91
          ) (Token id:Id.Lit_Chars val:'\ttest_expect_code 1 git diff-tree --exit-code HEAD^ HEAD\n' span_id:92)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'check if diff-index works for subproject elements'
            span_id: 99
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:103) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_expect_code 1 git diff-index --exit-code --cached save -- sub1\n'
            span_id: 104
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'check if diff-tree works for subproject elements'
            span_id: 111
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:115) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_expect_code 1 git diff-tree --exit-code HEAD^ HEAD -- sub1\n'
            span_id: 116
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check if git diff works for subproject elements' span_id:123))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:127) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_expect_code 1 git diff --exit-code HEAD^ HEAD\n'
            span_id: 128
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'check if clone works' span_id:135))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:139) 
          (Token id:Id.Lit_Chars val:'\tgit ls-files -s >expected &&\n' span_id:140) (Token id:Id.Lit_Chars val:'\tgit clone -l -s . cloned &&\n' span_id:141) 
          (Token
            id: Id.Lit_Chars
            val: '\t( cd cloned && git ls-files -s ) >current &&\n'
            span_id: 142
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected current\n' span_id:143)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'removing and adding subproject' span_id:150))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:154) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-index --force-remove -- sub2 &&\n'
            span_id: 155
          ) (Token id:Id.Lit_Chars val:'\tmv sub2 sub3 &&\n' span_id:156) 
          (Token id:Id.Lit_Chars val:'\tgit add sub3 &&\n' span_id:157) (Token id:Id.Lit_Chars val:'\tgit commit -q -m "renaming a subproject" &&\n' span_id:158) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_expect_code 1 git diff -M --name-status --exit-code HEAD^ HEAD\n'
            span_id: 159
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'checkout in superproject' span_id:172))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:176) 
          (Token id:Id.Lit_Chars val:'\tgit checkout save &&\n' span_id:177) (Token id:Id.Lit_Chars val:'\tgit diff-index --exit-code --raw --cached save -- sub1\n' span_id:178)
        )
      }
    )
    (C {(test_done)})
  ]
)