(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'basic credential helper tests' span_id:6))} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/lib-credential.sh)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup helper scripts' span_id:24))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:28) (Token id:Id.Lit_Chars val:'\tcat >dump <<-\\EOF &&\n' span_id:29) (Token id:Id.Lit_Chars val:'\twhoami=$(echo $0 | sed s/.*git-credential-//)\n' span_id:30) (Token id:Id.Lit_Chars val:'\techo >&2 "$whoami: $*"\n' span_id:31) (Token id:Id.Lit_Chars val:'\tOIFS=$IFS\n' span_id:32) (Token id:Id.Lit_Chars val:'\tIFS==\n' span_id:33) (Token id:Id.Lit_Chars val:'\twhile read key value; do\n' span_id:34) (Token id:Id.Lit_Chars val:'\t\techo >&2 "$whoami: $key=$value"\n' span_id:35) (Token id:Id.Lit_Chars val:'\t\teval "$key=$value"\n' span_id:36) (Token id:Id.Lit_Chars val:'\tdone\n' span_id:37) (Token id:Id.Lit_Chars val:'\tIFS=$OIFS\n' span_id:38) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:39) (Token id:Id.Lit_Chars val:'\n' span_id:40) (Token id: Id.Lit_Chars val: '\twrite_script git-credential-useless <<-\\EOF &&\n' span_id: 41 ) (Token id:Id.Lit_Chars val:'\t. ./dump\n' span_id:42) (Token id:Id.Lit_Chars val:'\texit 0\n' span_id:43) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:44) (Token id:Id.Lit_Chars val:'\n' span_id:45) (Token id: Id.Lit_Chars val: '\twrite_script git-credential-verbatim <<-\\EOF &&\n' span_id: 46 ) (Token id:Id.Lit_Chars val:'\tuser=$1; shift\n' span_id:47) (Token id:Id.Lit_Chars val:'\tpass=$1; shift\n' span_id:48) (Token id:Id.Lit_Chars val:'\t. ./dump\n' span_id:49) (Token id: Id.Lit_Chars val: '\ttest -z "$user" || echo username=$user\n' span_id: 50 ) (Token id:Id.Lit_Chars val:'\ttest -z "$pass" || echo password=$pass\n' span_id:51) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:52) (Token id:Id.Lit_Chars val:'\n' span_id:53) (Token id:Id.Lit_Chars val:'\tPATH="$PWD:$PATH"\n' span_id:54) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'credential_fill invokes helper' span_id:61))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:65) (Token id: Id.Lit_Chars val: '\tcheck fill "verbatim foo bar" <<-\\EOF\n' span_id: 66 ) (Token id:Id.Lit_Chars val:'\t--\n' span_id:67) (Token id:Id.Lit_Chars val:'\tusername=foo\n' span_id:68) (Token id:Id.Lit_Chars val:'\tpassword=bar\n' span_id:69) (Token id:Id.Lit_Chars val:'\t--\n' span_id:70) (Token id:Id.Lit_Chars val:'\tverbatim: get\n' span_id:71) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:72) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'credential_fill invokes multiple helpers' span_id:79))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:83) (Token id: Id.Lit_Chars val: '\tcheck fill useless "verbatim foo bar" <<-\\EOF\n' span_id: 84 ) (Token id:Id.Lit_Chars val:'\t--\n' span_id:85) (Token id:Id.Lit_Chars val:'\tusername=foo\n' span_id:86) (Token id:Id.Lit_Chars val:'\tpassword=bar\n' span_id:87) (Token id:Id.Lit_Chars val:'\t--\n' span_id:88) (Token id:Id.Lit_Chars val:'\tuseless: get\n' span_id:89) (Token id:Id.Lit_Chars val:'\tverbatim: get\n' span_id:90) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:91) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'credential_fill stops when we get a full response' span_id: 98 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:102) (Token id: Id.Lit_Chars val: '\tcheck fill "verbatim one two" "verbatim three four" <<-\\EOF\n' span_id: 103 ) (Token id:Id.Lit_Chars val:'\t--\n' span_id:104) (Token id:Id.Lit_Chars val:'\tusername=one\n' span_id:105) (Token id:Id.Lit_Chars val:'\tpassword=two\n' span_id:106) (Token id:Id.Lit_Chars val:'\t--\n' span_id:107) (Token id:Id.Lit_Chars val:'\tverbatim: get\n' span_id:108) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:109) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'credential_fill continues through partial response' span_id: 116 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:120) (Token id: Id.Lit_Chars val: '\tcheck fill "verbatim one \\"\\"" "verbatim two three" <<-\\EOF\n' span_id: 121 ) (Token id:Id.Lit_Chars val:'\t--\n' span_id:122) (Token id:Id.Lit_Chars val:'\tusername=two\n' span_id:123) (Token id:Id.Lit_Chars val:'\tpassword=three\n' span_id:124) (Token id:Id.Lit_Chars val:'\t--\n' span_id:125) (Token id:Id.Lit_Chars val:'\tverbatim: get\n' span_id:126) (Token id:Id.Lit_Chars val:'\tverbatim: get\n' span_id:127) (Token id:Id.Lit_Chars val:'\tverbatim: username=one\n' span_id:128) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:129) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'credential_fill passes along metadata' span_id:136))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:140) (Token id: Id.Lit_Chars val: '\tcheck fill "verbatim one two" <<-\\EOF\n' span_id: 141 ) (Token id:Id.Lit_Chars val:'\tprotocol=ftp\n' span_id:142) (Token id:Id.Lit_Chars val:'\thost=example.com\n' span_id:143) (Token id:Id.Lit_Chars val:'\tpath=foo.git\n' span_id:144) (Token id:Id.Lit_Chars val:'\t--\n' span_id:145) (Token id:Id.Lit_Chars val:'\tprotocol=ftp\n' span_id:146) (Token id:Id.Lit_Chars val:'\thost=example.com\n' span_id:147) (Token id:Id.Lit_Chars val:'\tpath=foo.git\n' span_id:148) (Token id:Id.Lit_Chars val:'\tusername=one\n' span_id:149) (Token id:Id.Lit_Chars val:'\tpassword=two\n' span_id:150) (Token id:Id.Lit_Chars val:'\t--\n' span_id:151) (Token id:Id.Lit_Chars val:'\tverbatim: get\n' span_id:152) (Token id:Id.Lit_Chars val:'\tverbatim: protocol=ftp\n' span_id:153) (Token id:Id.Lit_Chars val:'\tverbatim: host=example.com\n' span_id:154) (Token id:Id.Lit_Chars val:'\tverbatim: path=foo.git\n' span_id:155) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:156) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'credential_approve calls all helpers' span_id:163))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:167) (Token id: Id.Lit_Chars val: '\tcheck approve useless "verbatim one two" <<-\\EOF\n' span_id: 168 ) (Token id:Id.Lit_Chars val:'\tusername=foo\n' span_id:169) (Token id:Id.Lit_Chars val:'\tpassword=bar\n' span_id:170) (Token id:Id.Lit_Chars val:'\t--\n' span_id:171) (Token id:Id.Lit_Chars val:'\t--\n' span_id:172) (Token id:Id.Lit_Chars val:'\tuseless: store\n' span_id:173) (Token id:Id.Lit_Chars val:'\tuseless: username=foo\n' span_id:174) (Token id:Id.Lit_Chars val:'\tuseless: password=bar\n' span_id:175) (Token id:Id.Lit_Chars val:'\tverbatim: store\n' span_id:176) (Token id:Id.Lit_Chars val:'\tverbatim: username=foo\n' span_id:177) (Token id:Id.Lit_Chars val:'\tverbatim: password=bar\n' span_id:178) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:179) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'do not bother storing password-less credential' span_id:186))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:190) (Token id:Id.Lit_Chars val:'\tcheck approve useless <<-\\EOF\n' span_id:191) (Token id:Id.Lit_Chars val:'\tusername=foo\n' span_id:192) (Token id:Id.Lit_Chars val:'\t--\n' span_id:193) (Token id:Id.Lit_Chars val:'\t--\n' span_id:194) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:195) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'credential_reject calls all helpers' span_id:203))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:207) (Token id: Id.Lit_Chars val: '\tcheck reject useless "verbatim one two" <<-\\EOF\n' span_id: 208 ) (Token id:Id.Lit_Chars val:'\tusername=foo\n' span_id:209) (Token id:Id.Lit_Chars val:'\tpassword=bar\n' span_id:210) (Token id:Id.Lit_Chars val:'\t--\n' span_id:211) (Token id:Id.Lit_Chars val:'\t--\n' span_id:212) (Token id:Id.Lit_Chars val:'\tuseless: erase\n' span_id:213) (Token id:Id.Lit_Chars val:'\tuseless: username=foo\n' span_id:214) (Token id:Id.Lit_Chars val:'\tuseless: password=bar\n' span_id:215) (Token id:Id.Lit_Chars val:'\tverbatim: erase\n' span_id:216) (Token id:Id.Lit_Chars val:'\tverbatim: username=foo\n' span_id:217) (Token id:Id.Lit_Chars val:'\tverbatim: password=bar\n' span_id:218) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:219) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'usernames can be preserved' span_id:226))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:230) (Token id: Id.Lit_Chars val: '\tcheck fill "verbatim \\"\\" three" <<-\\EOF\n' span_id: 231 ) (Token id:Id.Lit_Chars val:'\tusername=one\n' span_id:232) (Token id:Id.Lit_Chars val:'\t--\n' span_id:233) (Token id:Id.Lit_Chars val:'\tusername=one\n' span_id:234) (Token id:Id.Lit_Chars val:'\tpassword=three\n' span_id:235) (Token id:Id.Lit_Chars val:'\t--\n' span_id:236) (Token id:Id.Lit_Chars val:'\tverbatim: get\n' span_id:237) (Token id:Id.Lit_Chars val:'\tverbatim: username=one\n' span_id:238) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:239) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'usernames can be overridden' span_id:246))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:250) (Token id: Id.Lit_Chars val: '\tcheck fill "verbatim two three" <<-\\EOF\n' span_id: 251 ) (Token id:Id.Lit_Chars val:'\tusername=one\n' span_id:252) (Token id:Id.Lit_Chars val:'\t--\n' span_id:253) (Token id:Id.Lit_Chars val:'\tusername=two\n' span_id:254) (Token id:Id.Lit_Chars val:'\tpassword=three\n' span_id:255) (Token id:Id.Lit_Chars val:'\t--\n' span_id:256) (Token id:Id.Lit_Chars val:'\tverbatim: get\n' span_id:257) (Token id:Id.Lit_Chars val:'\tverbatim: username=one\n' span_id:258) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:259) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'do not bother completing already-full credential' span_id: 266 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:270) (Token id: Id.Lit_Chars val: '\tcheck fill "verbatim three four" <<-\\EOF\n' span_id: 271 ) (Token id:Id.Lit_Chars val:'\tusername=one\n' span_id:272) (Token id:Id.Lit_Chars val:'\tpassword=two\n' span_id:273) (Token id:Id.Lit_Chars val:'\t--\n' span_id:274) (Token id:Id.Lit_Chars val:'\tusername=one\n' span_id:275) (Token id:Id.Lit_Chars val:'\tpassword=two\n' span_id:276) (Token id:Id.Lit_Chars val:'\t--\n' span_id:277) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:278) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'empty helper list falls back to internal getpass' span_id: 294 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:298) (Token id:Id.Lit_Chars val:'\tcheck fill <<-\\EOF\n' span_id:299) (Token id:Id.Lit_Chars val:'\t--\n' span_id:300) (Token id:Id.Lit_Chars val:'\tusername=askpass-username\n' span_id:301) (Token id:Id.Lit_Chars val:'\tpassword=askpass-password\n' span_id:302) (Token id:Id.Lit_Chars val:'\t--\n' span_id:303) (Token id:Id.Lit_Chars val:'\taskpass: Username:\n' span_id:304) (Token id:Id.Lit_Chars val:'\taskpass: Password:\n' span_id:305) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:306) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'internal getpass does not ask for known username' span_id: 313 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:317) (Token id:Id.Lit_Chars val:'\tcheck fill <<-\\EOF\n' span_id:318) (Token id:Id.Lit_Chars val:'\tusername=foo\n' span_id:319) (Token id:Id.Lit_Chars val:'\t--\n' span_id:320) (Token id:Id.Lit_Chars val:'\tusername=foo\n' span_id:321) (Token id:Id.Lit_Chars val:'\tpassword=askpass-password\n' span_id:322) (Token id:Id.Lit_Chars val:'\t--\n' span_id:323) (Token id:Id.Lit_Chars val:'\taskpass: Password:\n' span_id:324) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:325) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:HELPER) op: assign_op.Equal rhs: { (DQ ('!f() {\n') ('\t\tcat >/dev/null\n') ('\t\techo username=foo\n') ('\t\techo password=bar\n') ('\t}; f') ) } spids: [329] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'respect configured credentials' span_id:341))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:345) (Token id: Id.Lit_Chars val: '\ttest_config credential.helper "$HELPER" &&\n' span_id: 346 ) (Token id:Id.Lit_Chars val:'\tcheck fill <<-\\EOF\n' span_id:347) (Token id:Id.Lit_Chars val:'\t--\n' span_id:348) (Token id:Id.Lit_Chars val:'\tusername=foo\n' span_id:349) (Token id:Id.Lit_Chars val:'\tpassword=bar\n' span_id:350) (Token id:Id.Lit_Chars val:'\t--\n' span_id:351) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:352) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'match configured credential' span_id:359))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:363) (Token id: Id.Lit_Chars val: '\ttest_config credential.https://example.com.helper "$HELPER" &&\n' span_id: 364 ) (Token id:Id.Lit_Chars val:'\tcheck fill <<-\\EOF\n' span_id:365) (Token id:Id.Lit_Chars val:'\tprotocol=https\n' span_id:366) (Token id:Id.Lit_Chars val:'\thost=example.com\n' span_id:367) (Token id:Id.Lit_Chars val:'\tpath=repo.git\n' span_id:368) (Token id:Id.Lit_Chars val:'\t--\n' span_id:369) (Token id:Id.Lit_Chars val:'\tprotocol=https\n' span_id:370) (Token id:Id.Lit_Chars val:'\thost=example.com\n' span_id:371) (Token id:Id.Lit_Chars val:'\tusername=foo\n' span_id:372) (Token id:Id.Lit_Chars val:'\tpassword=bar\n' span_id:373) (Token id:Id.Lit_Chars val:'\t--\n' span_id:374) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:375) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'do not match configured credential' span_id:382))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:386) (Token id: Id.Lit_Chars val: '\ttest_config credential.https://foo.helper "$HELPER" &&\n' span_id: 387 ) (Token id:Id.Lit_Chars val:'\tcheck fill <<-\\EOF\n' span_id:388) (Token id:Id.Lit_Chars val:'\tprotocol=https\n' span_id:389) (Token id:Id.Lit_Chars val:'\thost=bar\n' span_id:390) (Token id:Id.Lit_Chars val:'\t--\n' span_id:391) (Token id:Id.Lit_Chars val:'\tprotocol=https\n' span_id:392) (Token id:Id.Lit_Chars val:'\thost=bar\n' span_id:393) (Token id:Id.Lit_Chars val:'\tusername=askpass-username\n' span_id:394) (Token id:Id.Lit_Chars val:'\tpassword=askpass-password\n' span_id:395) (Token id:Id.Lit_Chars val:'\t--\n' span_id:396) (Token id:Id.Lit_Chars val:'\taskpass: Username for ' span_id:397) ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:399)) (SQ (Token id:Id.Lit_Chars val:'https://bar' span_id:401)) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:403)) (SQ (Token id:Id.Lit_Chars val:':\n' span_id:405) (Token id:Id.Lit_Chars val:'\taskpass: Password for ' span_id:406) ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:408)) (SQ (Token id:Id.Lit_Chars val:'https://askpass-username@bar' span_id:410)) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:412)) (SQ (Token id:Id.Lit_Chars val:':\n' span_id:414) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:415) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'pull username from config' span_id:422))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:426) (Token id: Id.Lit_Chars val: '\ttest_config credential.https://example.com.username foo &&\n' span_id: 427 ) (Token id:Id.Lit_Chars val:'\tcheck fill <<-\\EOF\n' span_id:428) (Token id:Id.Lit_Chars val:'\tprotocol=https\n' span_id:429) (Token id:Id.Lit_Chars val:'\thost=example.com\n' span_id:430) (Token id:Id.Lit_Chars val:'\t--\n' span_id:431) (Token id:Id.Lit_Chars val:'\tprotocol=https\n' span_id:432) (Token id:Id.Lit_Chars val:'\thost=example.com\n' span_id:433) (Token id:Id.Lit_Chars val:'\tusername=foo\n' span_id:434) (Token id:Id.Lit_Chars val:'\tpassword=askpass-password\n' span_id:435) (Token id:Id.Lit_Chars val:'\t--\n' span_id:436) (Token id:Id.Lit_Chars val:'\taskpass: Password for ' span_id:437) ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:439)) (SQ (Token id:Id.Lit_Chars val:'https://foo@example.com' span_id:441)) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:443)) (SQ (Token id:Id.Lit_Chars val:':\n' span_id:445) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:446) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'http paths can be part of context' span_id:453))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:457) (Token id: Id.Lit_Chars val: '\tcheck fill "verbatim foo bar" <<-\\EOF &&\n' span_id: 458 ) (Token id:Id.Lit_Chars val:'\tprotocol=https\n' span_id:459) (Token id:Id.Lit_Chars val:'\thost=example.com\n' span_id:460) (Token id:Id.Lit_Chars val:'\tpath=foo.git\n' span_id:461) (Token id:Id.Lit_Chars val:'\t--\n' span_id:462) (Token id:Id.Lit_Chars val:'\tprotocol=https\n' span_id:463) (Token id:Id.Lit_Chars val:'\thost=example.com\n' span_id:464) (Token id:Id.Lit_Chars val:'\tusername=foo\n' span_id:465) (Token id:Id.Lit_Chars val:'\tpassword=bar\n' span_id:466) (Token id:Id.Lit_Chars val:'\t--\n' span_id:467) (Token id:Id.Lit_Chars val:'\tverbatim: get\n' span_id:468) (Token id:Id.Lit_Chars val:'\tverbatim: protocol=https\n' span_id:469) (Token id:Id.Lit_Chars val:'\tverbatim: host=example.com\n' span_id:470) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:471) (Token id: Id.Lit_Chars val: '\ttest_config credential.https://example.com.useHttpPath true &&\n' span_id: 472 ) (Token id:Id.Lit_Chars val:'\tcheck fill "verbatim foo bar" <<-\\EOF\n' span_id:473) (Token id:Id.Lit_Chars val:'\tprotocol=https\n' span_id:474) (Token id:Id.Lit_Chars val:'\thost=example.com\n' span_id:475) (Token id:Id.Lit_Chars val:'\tpath=foo.git\n' span_id:476) (Token id:Id.Lit_Chars val:'\t--\n' span_id:477) (Token id:Id.Lit_Chars val:'\tprotocol=https\n' span_id:478) (Token id:Id.Lit_Chars val:'\thost=example.com\n' span_id:479) (Token id:Id.Lit_Chars val:'\tpath=foo.git\n' span_id:480) (Token id:Id.Lit_Chars val:'\tusername=foo\n' span_id:481) (Token id:Id.Lit_Chars val:'\tpassword=bar\n' span_id:482) (Token id:Id.Lit_Chars val:'\t--\n' span_id:483) (Token id:Id.Lit_Chars val:'\tverbatim: get\n' span_id:484) (Token id:Id.Lit_Chars val:'\tverbatim: protocol=https\n' span_id:485) (Token id:Id.Lit_Chars val:'\tverbatim: host=example.com\n' span_id:486) (Token id:Id.Lit_Chars val:'\tverbatim: path=foo.git\n' span_id:487) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:488) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'helpers can abort the process' span_id:495))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:499) (Token id:Id.Lit_Chars val:'\ttest_must_fail git \\\n' span_id:500) (Token id:Id.Lit_Chars val:'\t\t-c credential.helper="!f() { echo quit=1; }; f" \\\n' span_id:501) (Token id: Id.Lit_Chars val: '\t\t-c credential.helper="verbatim foo bar" \\\n' span_id: 502 ) (Token id:Id.Lit_Chars val:'\t\tcredential fill >stdout &&\n' span_id:503) (Token id:Id.Lit_Chars val:'\t>expect &&\n' span_id:504) (Token id:Id.Lit_Chars val:'\ttest_cmp expect stdout\n' span_id:505) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'empty helper spec resets helper list' span_id:512))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:516) (Token id: Id.Lit_Chars val: '\ttest_config credential.helper "verbatim file file" &&\n' span_id: 517 ) (Token id:Id.Lit_Chars val:'\tcheck fill "" "verbatim cmdline cmdline" <<-\\EOF\n' span_id:518) (Token id:Id.Lit_Chars val:'\t--\n' span_id:519) (Token id:Id.Lit_Chars val:'\tusername=cmdline\n' span_id:520) (Token id:Id.Lit_Chars val:'\tpassword=cmdline\n' span_id:521) (Token id:Id.Lit_Chars val:'\t--\n' span_id:522) (Token id:Id.Lit_Chars val:'\tverbatim: get\n' span_id:523) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:524) ) } ) (C {(test_done)}) ] )