(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          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]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(.)} {(DQ ($ VSub_Name "$TEST_DIRECTORY")) (/lib-credential.sh)})
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (C {(test)} {(-z)} {(DQ ($ VSub_Name "$GIT_TEST_CREDENTIAL_HELPER"))})
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:skip_all)
                  op: Equal
                  rhs: {(DQ ("used to test external credential helpers"))}
                  spids: [62]
                )
              ]
              spids: [62]
            )
            (C {(test_done)})
          ]
          spids: [-1 59]
        )
      ]
      spids: [-1 70]
    )
    (AndOr
      children: [
        (C {(test)} {(-z)} {(DQ ($ VSub_Name "$GIT_TEST_CREDENTIAL_HELPER_SETUP"))})
        (C {(eval)} {(DQ ($ VSub_Name "$GIT_TEST_CREDENTIAL_HELPER_SETUP"))})
      ]
      op_id: Op_DPipe
    )
    (C {(helper_test_clean)} {(DQ ($ VSub_Name "$GIT_TEST_CREDENTIAL_HELPER"))})
    (C {(helper_test)} {(DQ ($ VSub_Name "$GIT_TEST_CREDENTIAL_HELPER"))})
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (C {(test)} {(-z)} {(DQ ($ VSub_Name "$GIT_TEST_CREDENTIAL_HELPER_TIMEOUT"))})
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (C {(say)} {(DQ ("# skipping timeout tests (GIT_TEST_CREDENTIAL_HELPER_TIMEOUT not set)"))})
          ]
          spids: [-1 122]
        )
      ]
      else_action: [
        (C {(helper_test_timeout)} {(DQ ($ VSub_Name "$GIT_TEST_CREDENTIAL_HELPER_TIMEOUT"))})
      ]
      spids: [131 140]
    )
    (C {(helper_test_clean)} {(DQ ($ VSub_Name "$GIT_TEST_CREDENTIAL_HELPER"))})
    (C {(test_done)})
  ]
)