(List (= scope= flags=0 words=[] bindings=[('test_description', {[SQ ]})]) (Com {[LIT_CHARS .]} {[LIT_CHARS ./test-lib.sh]}) (FunctionDef prepare_test_file [] (Com {[LIT_CHARS sed]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS "s/_/ /g"]]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS "s/>/\t/"]]} < (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "An_SP in an ordinary line>and a HT.\n"] [LIT_CHARS ">A HT (%).\n"] [LIT_CHARS "_>A SP and a HT (@%).\n"] [LIT_CHARS "_>_A SP, a HT and a SP (@%).\n"] [LIT_CHARS "_______Seven SP.\n"] [LIT_CHARS "________Eight SP (#).\n"] [LIT_CHARS "_______>Seven SP and a HT (@%).\n"] [LIT_CHARS "________>Eight SP and a HT (@#%).\n"] [LIT_CHARS "_______>_Seven SP, a HT and a SP (@%).\n"] [LIT_CHARS "________>_Eight SP, a HT and a SP (@#%).\n"] [LIT_CHARS "_______________Fifteen SP (#).\n"] [LIT_CHARS "_______________>Fifteen SP and a HT (@#%).\n"] [LIT_CHARS "________________Sixteen SP (#=).\n"] [LIT_CHARS "________________>Sixteen SP and a HT (@#%=).\n"] [LIT_CHARS "_____a__Five SP, a non WS, two SP.\n"] [LIT_CHARS "A line with a (!) trailing SP_\n"] [LIT_CHARS "A line with a (!) trailing HT>\n"]} 0), > ) ) (FunctionDef apply_patch [] (AndOr OP_AND_IF (Com < (FilenameRedirectNode filename={[LIT_CHARS target]} "> 1), > ) (Pipeline (Com {[LIT_CHARS sed]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS "s|"][\ LIT_ESCAPED_CHAR "\\("][LIT_CHARS "[ab]"][\ LIT_ESCAPED_CHAR "\\)"][LIT_CHARS "/file|"][\ LIT_ESCAPED_CHAR "\\1"][LIT_CHARS "/target|"]]} < (FilenameRedirectNode filename={[LIT_CHARS patch]} 0), > ) (Com {[LIT_CHARS git]} {[LIT_CHARS apply]} {[DQ [VarSub @]]}) ) ) ) (FunctionDef test_fix [] (List (AndOr OP_OR_IF (Com {[LIT_CHARS apply_patch]} {[LIT_CHARS --whitespace] [LIT_OTHER "="] [LIT_CHARS fix]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) (Pipeline (Com {[VarSub DIFF]} {[LIT_CHARS file]} {[LIT_CHARS target]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS -n]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS "s/^> //p"]]} < (FilenameRedirectNode filename={[LIT_CHARS fixed]} "> 1), > ) ) (= scope= flags=0 words=[] bindings=[('fixed_cnt', {[ComSub (Com redirects=[(FilenameRedirectNode filename={[LIT_CHARS fixed]} 0)]{[LIT_CHARS wc]} {[LIT_CHARS -l]})]})]) (Case to_match={[DQ [VarSub 1]]}, pat_word_list=[[{[SQ ]}], [{[LIT_OTHER "?"] [LIT_OTHER "*"]}]] (= scope= flags=0 words=[] bindings=[('expect_cnt', {[VarSub fixed_cnt]})]) (= scope= flags=0 words=[] bindings=[('expect_cnt', {[ComSub (Pipeline (Com redirects=[(FilenameRedirectNode filename={[LIT_CHARS fixed]} 0)]{[LIT_CHARS grep]} {[DQ [LIT_CHARS "["][VarSub 1][LIT_CHARS "]"]]}) (Com {[LIT_CHARS wc]} {[LIT_CHARS -l]}) )]})]) ) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[VarSub fixed_cnt]} {[LIT_CHARS -eq]} {[VarSub expect_cnt]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) (Case to_match={[DQ [VarSub 1]]}, pat_word_list=[[{[SQ ]}], [{[LIT_OTHER "?"] [LIT_OTHER "*"]}]] (= scope= flags=0 words=[] bindings=[('expect_cnt', {[LIT_CHARS 0]})]) (= scope= flags=0 words=[] bindings=[('expect_cnt', {[ComSub (Pipeline (Com redirects=[(FilenameRedirectNode filename={[LIT_CHARS file]} 0)]{[LIT_CHARS grep]} {[DQ [LIT_CHARS "["][VarSub 1][LIT_CHARS "]"]]}) (Com {[LIT_CHARS wc]} {[LIT_CHARS -l]}) )]})]) ) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[VarSub fixed_cnt]} {[LIT_CHARS -eq]} {[VarSub expect_cnt]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]}) ) (Com {[LIT_CHARS git]} {[LIT_CHARS diff-files]} {[LIT_CHARS -p]} {[LIT_CHARS target]} < (FilenameRedirectNode filename={[LIT_CHARS fixed-patch]} "> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -s]} {[LIT_CHARS fixed-patch]}) (Com {[LIT_CHARS return]} {[LIT_CHARS 0]}) ) (Com < (FilenameRedirectNode filename={[LIT_CHARS target]} "> 1), > ) (Com {[LIT_CHARS git]} {[LIT_CHARS apply]} {[LIT_CHARS --whitespace] [LIT_OTHER "="] [LIT_CHARS error-all]} < (FilenameRedirectNode filename={[LIT_CHARS fixed-patch]} 0), > ) ) ) (Com {[LIT_CHARS test_expect_success]} {[LIT_CHARS setup]} {[SQ file &&\n"> file &&\n"> patch &&\n"> target &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ .gitattributes &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ /\t/\" <<-\\EOF >expect &&\n"> and a HT.\n"> \n"> ]}) (For t [{[LIT_CHARS -]}, {[SQ ]}]) (List (Case to_match={[DQ [VarSub t]]}, pat_word_list=[[{[SQ ]}], [{[LIT_OTHER "*"]}]] (= scope= flags=0 words=[] bindings=[('tt', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('tt', {[SQ ]})]) ) (For s [{[LIT_CHARS -]}, {[SQ ]}]) (List (Case to_match={[DQ [VarSub s]]}, pat_word_list=[[{[SQ ]}], [{[LIT_OTHER "*"]}]] (= scope= flags=0 words=[] bindings=[('ts', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('ts', {[SQ ]})]) ) (For i [{[LIT_CHARS -]}, {[SQ ]}]) (List (Case to_match={[DQ [VarSub i]]}, pat_word_list=[[{[SQ ]}], [{[LIT_OTHER "*"]}]] (= scope= flags=0 words=[] bindings=[('ti', {[SQ ]}), ('ti16', {[SQ flags=0 words=[] bindings=[('th', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('th', {[SQ ]})]) ) (= scope= flags=0 words=[] bindings=[('rule', {[VarSub t] [LIT_CHARS trailing] [LIT_COMMA ","] [VarSub s] [LIT_CHARS space] [LIT_COMMA ","] [VarSub i] [LIT_CHARS indent] [LIT_COMMA ","] [VarSub h] [LIT_CHARS tab]})]) (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[LIT_CHARS .gitattributes]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "rule="][VarSub rule]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "rule="][VarSub rule][LIT_CHARS ",tabwidth=16"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "rule="][VarSub rule][LIT_CHARS " (attributes)"]]} {[SQ .gitattributes &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "rule="][VarSub rule][LIT_CHARS ",tabwidth=16 (attributes)"]]} {[SQ .gitattributes &&\n"> ]}) ) ) ) ) ) ) ) ) (FunctionDef create_patch [] (Com {[LIT_CHARS sed]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS "s/_/ /"]]} < (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "diff --git a/target b/target\n"] [LIT_CHARS "index e69de29..8bd6648 100644\n"] [LIT_CHARS "--- a/target\n"] [LIT_CHARS "+++ b/target\n"] [LIT_CHARS "@@ -0,0 +1,3 @@\n"] [LIT_CHARS "+An empty line follows\n"] [LIT_CHARS "+\n"] [LIT_CHARS "+A line with trailing whitespace and no newline_\n"] [LIT_CHARS "\\ No newline at end of file\n"]} 0), > ) ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ target &&\n"> patch-file &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ one &&\n"> expect &&\n"> one &&\n"> patch &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ one &&\n"> expect &&\n"> one &&\n"> patch &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ one &&\n"> expect &&\n"> one &&\n"> patch &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ one &&\n"> expect &&\n"> patch &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ one &&\n"> >one &&\n"> expect &&\n"> patch &&\n"> error &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ one &&\n"> expect &&\n"> >one &&\n"> patch &&\n"> error &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ one &&\n"> >one &&\n"> expect &&\n"> patch &&\n"> error &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ one &&\n"> >one &&\n"> patch &&\n"> one &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ one &&\n"> >one &&\n"> patch &&\n"> one &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ one &&\n"> >one &&\n"> >one &&\n"> patch &&\n"> one &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ one &&\n"> >one &&\n"> >one &&\n"> >one &&\n"> patch &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ one &&\n"> one &&\n"> patch &&\n"> one &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ one &&\n"> >one &&\n"> one &&\n"> patch &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ one &&\n"> >one &&\n"> patch &&\n"> one &&\n"> ]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS -e] [SQ ]} < (FilenameRedirectNode filename={[LIT_CHARS one]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "a\n"][LIT_CHARS "b\n"][LIT_CHARS "c\n"][LIT_CHARS "\t\t Z\n"]]} 0), > ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ >one &&\n"> patch &&\n"> one &&\n"> >expect &&\n"> ]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS -e] [SQ ]} < (FilenameRedirectNode filename={[LIT_CHARS one]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "a\n"][LIT_CHARS "b\n"][LIT_CHARS "c\n"][LIT_CHARS "\t\t Z\n"]]} 0), > ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ >one &&\n"> patch &&\n"> one &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ one &&\n"> >one &&\n"> >one &&\n"> >one &&\n"> >one &&\n"> patch &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ one &&\n"> >one &&\n"> >one &&\n"> >one &&\n"> >one &&\n"> patch &&\n"> >expect &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ preimage <<-\\EOF &&\n"> patch <<-\\EOF &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ used &&\n"> unused &&\n"> used &&\n"> unused &&\n"> patch &&\n"> ]}) (Com {[LIT_CHARS test_done]}) )