(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 (If (Com {[LIT_CHARS test_have_prereq]} {[LIT_CHARS MINGW]} ) (Com {[LIT_CHARS dos2unix]} {[LIT_CHARS -q]} {[LIT_CHARS stderr]} ) ) (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_DBRACKET_LIKE "="] [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 cat]} < (FilenameRedirectNode filename={[LIT_CHARS askpass]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "#!/bin/sh\n"] [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), > ) (Com {[LIT_CHARS chmod]} {[LIT_OTHER "+"] [LIT_CHARS x]} {[LIT_CHARS askpass]} ) (= scope= flags=0 words=[] bindings=[('GIT_ASKPASS', {[DQ [VarSub PWD][LIT_CHARS /askpass]]})]) (= scope= flags=1 words=[{[LIT_CHARS GIT_ASKPASS]}] bindings=[]) )