(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 can handle submodules' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/lib-submodule-update.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:25))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:29) 
          (Token id:Id.Lit_Chars val:'\tmkdir submodule &&\n' span_id:30) (Token id:Id.Lit_Chars val:'\t(cd submodule &&\n' span_id:31) 
          (Token id:Id.Lit_Chars val:'\t git init &&\n' span_id:32) (Token id:Id.Lit_Chars val:'\t test_commit first) &&\n' span_id:33) 
          (Token id:Id.Lit_Chars val:'\tgit add submodule &&\n' span_id:34) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:35) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m superproject &&\n' span_id:36) (Token id:Id.Lit_Chars val:'\t(cd submodule &&\n' span_id:37) 
          (Token id:Id.Lit_Chars val:'\t test_commit second) &&\n' span_id:38) (Token id:Id.Lit_Chars val:'\tgit add submodule &&\n' span_id:39) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:40) (Token id:Id.Lit_Chars val:'\tgit commit -m updated.superproject\n' span_id:41)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'"reset <submodule>" updates the index' span_id:48))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:52) 
          (Token id:Id.Lit_Chars val:'\tgit update-index --refresh &&\n' span_id:53) (Token id:Id.Lit_Chars val:'\tgit diff-files --quiet &&\n' span_id:54) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-index --quiet --cached HEAD &&\n'
            span_id: 55
          ) (Token id:Id.Lit_Chars val:'\tgit reset HEAD^ submodule &&\n' span_id:56) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git diff-files --quiet &&\n'
            span_id: 57
          ) (Token id:Id.Lit_Chars val:'\tgit reset submodule &&\n' span_id:58) 
          (Token id:Id.Lit_Chars val:'\tgit diff-files --quiet\n' span_id:59)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'"checkout <submodule>" updates the index only' span_id:66))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:70) 
          (Token id:Id.Lit_Chars val:'\tgit update-index --refresh &&\n' span_id:71) (Token id:Id.Lit_Chars val:'\tgit diff-files --quiet &&\n' span_id:72) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-index --quiet --cached HEAD &&\n'
            span_id: 73
          ) (Token id:Id.Lit_Chars val:'\tgit checkout HEAD^ submodule &&\n' span_id:74) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git diff-files --quiet &&\n'
            span_id: 75
          ) (Token id:Id.Lit_Chars val:'\tgit checkout HEAD submodule &&\n' span_id:76) 
          (Token id:Id.Lit_Chars val:'\tgit diff-files --quiet\n' span_id:77)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '"checkout <submodule>" honors diff.ignoreSubmodules'
            span_id: 84
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:88) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config diff.ignoreSubmodules dirty &&\n'
            span_id: 89
          ) (Token id:Id.Lit_Chars val:'\techo x> submodule/untracked &&\n' span_id:90) 
          (Token id:Id.Lit_Chars val:'\tgit checkout HEAD >actual 2>&1 &&\n' span_id:91) (Token id:Id.Lit_Chars val:'\t! test -s actual\n' span_id:92)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '"checkout <submodule>" honors submodule.*.ignore from .gitmodules'
            span_id: 99
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:103) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config diff.ignoreSubmodules none &&\n'
            span_id: 104
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config -f .gitmodules submodule.submodule.path submodule &&\n'
            span_id: 105
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config -f .gitmodules submodule.submodule.ignore untracked &&\n'
            span_id: 106
          ) (Token id:Id.Lit_Chars val:'\tgit checkout HEAD >actual 2>&1 &&\n' span_id:107) 
          (Token id:Id.Lit_Chars val:'\t! test -s actual\n' span_id:108)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '"checkout <submodule>" honors submodule.*.ignore from .git/config'
            span_id: 115
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:119) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config -f .gitmodules submodule.submodule.ignore none &&\n'
            span_id: 120
          ) (Token id:Id.Lit_Chars val:'\tgit config submodule.submodule.path submodule &&\n' span_id:121) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config submodule.submodule.ignore all &&\n'
            span_id: 122
          ) (Token id:Id.Lit_Chars val:'\tgit checkout HEAD >actual 2>&1 &&\n' span_id:123) 
          (Token id:Id.Lit_Chars val:'\t! test -s actual\n' span_id:124)
        )
      }
    )
    (C {(test_submodule_switch)} {(DQ ('git checkout'))})
    (C {(test_submodule_forced_switch)} {(DQ ('git checkout -f'))})
    (C {(test_done)})
  ]
)