(List (FunctionDef check [] (List (= scope= flags=0 words=[] bindings=[('credential_opts', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('credential_cmd', {[VarSub 1]})]) (Com {[LIT_CHARS shift]}) (For arg [{[DQ [VarSub @]]}]) (= scope= flags=0 words=[] bindings=[('credential_opts', {[DQ [VarSub credential_opts][LIT_CHARS " -c credential.helper='"][VarSub arg][LIT_CHARS "'"]]})]) ) (AndOr OP_AND_IF (Com {[LIT_CHARS read_chunk]} < (FilenameRedirectNode filename={[LIT_CHARS stdin]} "> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS read_chunk]} < (FilenameRedirectNode filename={[LIT_CHARS expect-stdout]} "> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS read_chunk]} < (FilenameRedirectNode filename={[LIT_CHARS expect-stderr]} "> 1), > ) (AndOr OP_AND_IF (If (Pipeline! (Com {[LIT_CHARS eval]} {[DQ [LIT_CHARS "git "][VarSub credential_opts][LIT_CHARS " credential "][VarSub credential_cmd][LIT_CHARS " stdout 2>stderr"]]}) ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "git credential failed with code "][VarSub ?]]}) (AndOr OP_AND_IF (Com {[LIT_CHARS cat]} {[LIT_CHARS stderr]}) (Com {[LIT_CHARS false]}) ) ) ) (AndOr OP_AND_IF (Com {[LIT_CHARS test_cmp]} {[LIT_CHARS expect-stdout]} {[LIT_CHARS stdout]}) (Com {[LIT_CHARS test_cmp]} {[LIT_CHARS expect-stderr]} {[LIT_CHARS stderr]}) ) ) ) ) ) ) ) (FunctionDef read_chunk [] (While (Com {[LIT_CHARS read]} {[LIT_CHARS line]}) (Case to_match={[DQ [VarSub line]]}, pat_word_list=[[{[LIT_CHARS --]}], [{[LIT_OTHER "*"]}]] (Com {[LIT_CHARS break]}) (Com {[LIT_CHARS echo]} {[DQ [VarSub line]]}) ) ) ) (FunctionDef helper_test_clean [] (List (Com {[LIT_CHARS reject]} {[VarSub 1]} {[LIT_CHARS https]} {[LIT_CHARS example.com]} {[LIT_CHARS store-user]}) (Com {[LIT_CHARS reject]} {[VarSub 1]} {[LIT_CHARS https]} {[LIT_CHARS example.com]} {[LIT_CHARS user1]}) (Com {[LIT_CHARS reject]} {[VarSub 1]} {[LIT_CHARS https]} {[LIT_CHARS example.com]} {[LIT_CHARS user2]}) (Com {[LIT_CHARS reject]} {[VarSub 1]} {[LIT_CHARS http]} {[LIT_CHARS path.tld]} {[LIT_CHARS user]}) (Com {[LIT_CHARS reject]} {[VarSub 1]} {[LIT_CHARS https]} {[LIT_CHARS timeout.tld]} {[LIT_CHARS user]}) ) ) (FunctionDef reject [] (Pipeline (Subshell (List (Com {[LIT_CHARS echo]} {[LIT_VAR_LIKE "protocol="] [VarSub 2] =}) (Com {[LIT_CHARS echo]} {[LIT_VAR_LIKE "host="] [VarSub 3] =}) (Com {[LIT_CHARS echo]} {[LIT_VAR_LIKE "username="] [VarSub 4] =}) ) ) (Com {[LIT_CHARS git]} {[LIT_CHARS -c]} {[LIT_CHARS credential.helper] [LIT_OTHER "="] [VarSub 1]} {[LIT_CHARS credential]} {[LIT_CHARS reject]}) ) ) (FunctionDef helper_test [] (List (= scope= flags=0 words=[] bindings=[('HELPER', {[VarSub 1]})]) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "helper ("][VarSub HELPER][LIT_CHARS ") has no existing data"]]} {[SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "helper ("][VarSub HELPER][LIT_CHARS ") stores password"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "helper ("][VarSub HELPER][LIT_CHARS ") can retrieve password"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "helper ("][VarSub HELPER][LIT_CHARS ") requires matching protocol"]]} {[SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "helper ("][VarSub HELPER][LIT_CHARS ") requires matching host"]]} {[SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "helper ("][VarSub HELPER][LIT_CHARS ") requires matching username"]]} {[SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "helper ("][VarSub HELPER][LIT_CHARS ") requires matching path"]]} {[SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "helper ("][VarSub HELPER][LIT_CHARS ") can forget host"]]} {[SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "helper ("][VarSub HELPER][LIT_CHARS ") can store multiple users"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "helper ("][VarSub HELPER][LIT_CHARS ") can forget user"]]} {[SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "helper ("][VarSub HELPER][LIT_CHARS ") remembers other user"]]} {[SQ ]}) ) ) (FunctionDef helper_test_timeout [] (List (= scope= flags=0 words=[] bindings=[('HELPER', {[DQ [VarSub *]]})]) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "helper ("][VarSub HELPER][LIT_CHARS ") times out"]]} {[SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ] [\ LIT_ESCAPED_CHAR "\\'"] [SQ ]}) ) ) (Com {[LIT_CHARS write_script]} {[LIT_CHARS askpass]} < (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "echo >&2 askpass: $*\n"] [LIT_CHARS "what=$(echo $1 | cut -d\" \" -f1 | tr A-Z a-z | tr -cd a-z)\n"] [LIT_CHARS "echo \"askpass-$what\"\n"]} 0), > ) (= scope= flags=0 words=[] bindings=[('GIT_ASKPASS', {[DQ [VarSub PWD][LIT_CHARS /askpass]]})]) (= scope= flags=1 words=[{[LIT_CHARS GIT_ASKPASS]}] bindings=[]) )