(command.CommandList
  children: [
    (command.ShAssignment
      left: <Id.Lit_VarLike 'test_description='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'test_description='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'test_description='> 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'>
              )
            }
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [{<.>} {<'./test-lib.sh'>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [{<.>} {(DQ ($ Id.VSub_DollarName TEST_DIRECTORY)) <'/lib-credential.sh'>}]
      redirects: []
      do_fork: T
    )
    (command.If
      if_kw: <Id.KW_If if>
      arms: [
        (IfArm
          keyword: <Id.KW_If if>
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.Simple
                      blame_tok: <test>
                      more_env: []
                      words: [{<test>} {<-z>} {(DQ ($ Id.VSub_DollarName GIT_TEST_CREDENTIAL_HELPER))}]
                      redirects: []
                      do_fork: T
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          then_kw: <Id.KW_Then then>
          action: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'skip_all='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'skip_all='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'skip_all='> name:skip_all)
                  op: assign_op.Equal
                  rhs: {(DQ <'used to test external credential helpers'>)}
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <test_done>
              more_env: []
              words: [{<test_done>}]
              redirects: []
              do_fork: T
            )
          ]
          spids: [48 59]
        )
      ]
      else_action: []
      fi_kw: <Id.KW_Fi fi>
      redirects: []
    )
    (command.AndOr
      children: [
        (command.Simple
          blame_tok: <test>
          more_env: []
          words: [{<test>} {<-z>} {(DQ ($ Id.VSub_DollarName GIT_TEST_CREDENTIAL_HELPER_SETUP))}]
          redirects: []
          do_fork: T
        )
        (command.Simple
          blame_tok: <eval>
          more_env: []
          words: [{<eval>} {(DQ ($ Id.VSub_DollarName GIT_TEST_CREDENTIAL_HELPER_SETUP))}]
          redirects: []
          do_fork: T
        )
      ]
      ops: [<Id.Op_DPipe _>]
    )
    (command.Simple
      blame_tok: <helper_test_clean>
      more_env: []
      words: [{<helper_test_clean>} {(DQ ($ Id.VSub_DollarName GIT_TEST_CREDENTIAL_HELPER))}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <helper_test>
      more_env: []
      words: [{<helper_test>} {(DQ ($ Id.VSub_DollarName GIT_TEST_CREDENTIAL_HELPER))}]
      redirects: []
      do_fork: T
    )
    (command.If
      if_kw: <Id.KW_If if>
      arms: [
        (IfArm
          keyword: <Id.KW_If if>
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.Simple
                      blame_tok: <test>
                      more_env: []
                      words: [
                        {<test>}
                        {<-z>}
                        {(DQ ($ Id.VSub_DollarName GIT_TEST_CREDENTIAL_HELPER_TIMEOUT))}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          then_kw: <Id.KW_Then then>
          action: [
            (command.Simple
              blame_tok: <say>
              more_env: []
              words: [
                {<say>}
                {(DQ <'# skipping timeout tests (GIT_TEST_CREDENTIAL_HELPER_TIMEOUT not set)'>)}
              ]
              redirects: []
              do_fork: T
            )
          ]
          spids: [111 122]
        )
      ]
      else_kw: <Id.KW_Else else>
      else_action: [
        (command.Simple
          blame_tok: <helper_test_timeout>
          more_env: []
          words: [
            {<helper_test_timeout>}
            {(DQ ($ Id.VSub_DollarName GIT_TEST_CREDENTIAL_HELPER_TIMEOUT))}
          ]
          redirects: []
          do_fork: T
        )
      ]
      fi_kw: <Id.KW_Fi fi>
      redirects: []
    )
    (command.Simple
      blame_tok: <helper_test_clean>
      more_env: []
      words: [{<helper_test_clean>} {(DQ ($ Id.VSub_DollarName GIT_TEST_CREDENTIAL_HELPER))}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_done>
      more_env: []
      words: [{<test_done>}]
      redirects: []
      do_fork: T
    )
  ]
)