(CommandList
  children: [
    (FuncDef
      name: test_proto
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:desc)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [24]
                )
              ]
              spids: [24]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:proto)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [28]
                )
              ]
              spids: [28]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:url)
                  op: Equal
                  rhs: {($ VSub_Number '$3')}
                  spids: [32]
                )
              ]
              spids: [32]
            )
            (C {(test_expect_success)} {(DQ ('clone ') ($ VSub_Number '$1') (' (enabled)'))} 
              {
                (SQ <'\n'> <'\t\trm -rf tmp.git &&\n'> <'\t\t(\n'> 
                  <'\t\t\tGIT_ALLOW_PROTOCOL=$proto &&\n'> <'\t\t\texport GIT_ALLOW_PROTOCOL &&\n'> <'\t\t\tgit clone --bare "$url" tmp.git\n'> <'\t\t)\n'> <'\t'>
                )
              }
            )
            (C {(test_expect_success)} {(DQ ('fetch ') ($ VSub_Number '$1') (' (enabled)'))} 
              {
                (SQ <'\n'> <'\t\t(\n'> <'\t\t\tcd tmp.git &&\n'> 
                  <'\t\t\tGIT_ALLOW_PROTOCOL=$proto &&\n'> <'\t\t\texport GIT_ALLOW_PROTOCOL &&\n'> <'\t\t\tgit fetch\n'> <'\t\t)\n'> <'\t'>
                )
              }
            )
            (C {(test_expect_success)} {(DQ ('push ') ($ VSub_Number '$1') (' (enabled)'))} 
              {
                (SQ <'\n'> <'\t\t(\n'> <'\t\t\tcd tmp.git &&\n'> 
                  <'\t\t\tGIT_ALLOW_PROTOCOL=$proto &&\n'> <'\t\t\texport GIT_ALLOW_PROTOCOL &&\n'> <'\t\t\tgit push origin HEAD:pushed\n'> <'\t\t)\n'> <'\t'>
                )
              }
            )
            (C {(test_expect_success)} {(DQ ('push ') ($ VSub_Number '$1') (' (disabled)'))} 
              {
                (SQ <'\n'> <'\t\t(\n'> <'\t\t\tcd tmp.git &&\n'> <'\t\t\tGIT_ALLOW_PROTOCOL=none &&\n'> 
                  <'\t\t\texport GIT_ALLOW_PROTOCOL &&\n'> <'\t\t\ttest_must_fail git push origin HEAD:pushed\n'> <'\t\t)\n'> <'\t'>
                )
              }
            )
            (C {(test_expect_success)} {(DQ ('fetch ') ($ VSub_Number '$1') (' (disabled)'))} 
              {
                (SQ <'\n'> <'\t\t(\n'> <'\t\t\tcd tmp.git &&\n'> <'\t\t\tGIT_ALLOW_PROTOCOL=none &&\n'> 
                  <'\t\t\texport GIT_ALLOW_PROTOCOL &&\n'> <'\t\t\ttest_must_fail git fetch\n'> <'\t\t)\n'> <'\t'>
                )
              }
            )
            (C {(test_expect_success)} {(DQ ('clone ') ($ VSub_Number '$1') (' (disabled)'))} 
              {
                (SQ <'\n'> <'\t\trm -rf tmp.git &&\n'> <'\t\t(\n'> 
                  <'\t\t\tGIT_ALLOW_PROTOCOL=none &&\n'> <'\t\t\texport GIT_ALLOW_PROTOCOL &&\n'> <'\t\t\ttest_must_fail git clone --bare "$url" tmp.git\n'> 
                  <'\t\t)\n'> <'\t'>
                )
              }
            )
          ]
          spids: [21]
        )
      spids: [16 20]
    )
    (FuncDef
      name: setup_ssh_wrapper
      body: 
        (BraceGroup
          children: [
            (C {(test_expect_success)} {(SQ <'setup ssh wrapper'>)} 
              {
                (SQ <'\n'> <'\t\twrite_script ssh-wrapper <<-\\EOF &&\n'> <'\t\techo >&2 "ssh: $*"\n'> 
                  <'\t\thost=$1; shift\n'> <'\t\tcd "$TRASH_DIRECTORY/$host" &&\n'> <'\t\teval "$*"\n'> <'\t\tEOF\n'> 
                  <'\t\tGIT_SSH="$PWD/ssh-wrapper" &&\n'> <'\t\texport GIT_SSH &&\n'> <'\t\texport TRASH_DIRECTORY\n'> <'\t'>
                )
              }
            )
          ]
          spids: [175]
        )
      spids: [170 174]
    )
    (FuncDef
      name: setup_ext_wrapper
      body: 
        (BraceGroup
          children: [
            (C {(test_expect_success)} {(SQ <'setup ext wrapper'>)} 
              {
                (SQ <'\n'> <'\t\twrite_script fake-remote <<-\\EOF &&\n'> 
                  <'\t\techo >&2 "fake-remote: $*"\n'> <'\t\tcd "$TRASH_DIRECTORY/remote" &&\n'> <'\t\teval "$*"\n'> <'\t\tEOF\n'> 
                  <'\t\tPATH=$TRASH_DIRECTORY:$PATH &&\n'> <'\t\texport TRASH_DIRECTORY\n'> <'\t'>
                )
              }
            )
          ]
          spids: [215]
        )
      spids: [210 214]
    )
  ]
)