(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: [16777215 59]
        )
      ]
      spids: [16777215 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: [16777215 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)})
  ]
)