(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: 
            {
              (SQ <'external credential helper tests\n'> <'\n'> 
                <'This is a tool for authors of external helper tools to sanity-check\n'> <'their helpers. If you have written the "git-credential-foo" helper,\n'> <'you check it with:\n'> 
                <'\n'> <'  make GIT_TEST_CREDENTIAL_HELPER=foo t0303-credential-external.sh\n'> <'\n'> 
                <'This assumes that your helper is capable of both storing and\n'> <'retrieving credentials (some helpers may be read-only, and they will\n'> <'fail these tests).\n'> 
                <'\n'> <'Please note that the individual tests do not verify all of the\n'> 
                <'preconditions themselves, but rather build on each other. A failing\n'> <'test means that tests later in the sequence can return false "OK"\n'> <'results.\n'> <'\n'> 
                <'If your helper supports time-based expiration with a configurable\n'> <'timeout, you can test that feature with:\n'> <'\n'> <'  make GIT_TEST_CREDENTIAL_HELPER=foo \\\n'> 
                <'       GIT_TEST_CREDENTIAL_HELPER_TIMEOUT="foo --timeout=1" \\\n'> <'       t0303-credential-external.sh\n'> <'\n'> 
                <'If your helper requires additional setup before the tests are started,\n'> <'you can set GIT_TEST_CREDENTIAL_HELPER_SETUP to a sequence of shell\n'> <'commands.\n'>
              )
            }
          spids: [4]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (C {<.>} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) <'/lib-credential.sh'>})
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName '$GIT_TEST_CREDENTIAL_HELPER'))})
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:skip_all)
                  op: assign_op.Equal
                  rhs: {(DQ <'used to test external credential helpers'>)}
                  spids: [62]
                )
              ]
            )
            (C {<test_done>})
          ]
          spids: [48 59]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName '$GIT_TEST_CREDENTIAL_HELPER_SETUP'))})
        (C {<eval>} {(DQ ($ Id.VSub_DollarName '$GIT_TEST_CREDENTIAL_HELPER_SETUP'))})
      ]
    )
    (C {<helper_test_clean>} {(DQ ($ Id.VSub_DollarName '$GIT_TEST_CREDENTIAL_HELPER'))})
    (C {<helper_test>} {(DQ ($ Id.VSub_DollarName '$GIT_TEST_CREDENTIAL_HELPER'))})
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {<test>} {<-z>} {(DQ ($ Id.VSub_DollarName '$GIT_TEST_CREDENTIAL_HELPER_TIMEOUT'))})
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (C {<say>} {(DQ <'# skipping timeout tests (GIT_TEST_CREDENTIAL_HELPER_TIMEOUT not set)'>)})
          ]
          spids: [111 122]
        )
      ]
      else_action: [
        (C {<helper_test_timeout>} {(DQ ($ Id.VSub_DollarName '$GIT_TEST_CREDENTIAL_HELPER_TIMEOUT'))})
      ]
    )
    (C {<helper_test_clean>} {(DQ ($ Id.VSub_DollarName '$GIT_TEST_CREDENTIAL_HELPER'))})
    (C {<test_done>})
  ]
)