(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>}) ] )