(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"test protocol whitelisting with submodules">)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(.)} {(DQ ($ VSub_Name "$TEST_DIRECTORY")) (/lib-proto-disable.sh)})
    (C {(setup_ext_wrapper)})
    (C {(setup_ssh_wrapper)})
    (C {(test_expect_success)} {(SQ <"setup repository with submodules">)} 
      {
        (SQ <"\n"> <"\tmkdir remote &&\n"> <"\tgit init remote/repo.git &&\n"> 
          <"\t(cd remote/repo.git && test_commit one) &&\n"> <"\t# submodule-add should probably trust what we feed it on the cmdline,\n"> 
          <"\t# but its implementation is overly conservative.\n"> <"\tGIT_ALLOW_PROTOCOL=ssh git submodule add remote:repo.git ssh-module &&\n"> 
          <
"\tGIT_ALLOW_PROTOCOL=ext git submodule add \"ext::fake-remote %S repo.git\" ext-module &&\n"
          > <"\tgit commit -m \"add submodules\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"clone with recurse-submodules fails">)} 
      {(SQ <"\n"> <"\ttest_must_fail git clone --recurse-submodules . dst\n">)}
    )
    (C {(test_expect_success)} {(SQ <"setup individual updates">)} 
      {
        (SQ <"\n"> <"\trm -rf dst &&\n"> <"\tgit clone . dst &&\n"> <"\tgit -C dst submodule init\n">)
      }
    )
    (C {(test_expect_success)} {(SQ <"update of ssh allowed">)} 
      {(SQ <"\n"> <"\tgit -C dst submodule update ssh-module\n">)}
    )
    (C {(test_expect_success)} {(SQ <"update of ext not allowed">)} 
      {(SQ <"\n"> <"\ttest_must_fail git -C dst submodule update ext-module\n">)}
    )
    (C {(test_expect_success)} {(SQ <"user can override whitelist">)} 
      {(SQ <"\n"> <"\tGIT_ALLOW_PROTOCOL=ext git -C dst submodule update ext-module\n">)}
    )
    (C {(test_done)})
  ]
)