(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:'Test diff indent heuristic.\n' span_id:6) (Token id:Id.Lit_Chars val:'\n' span_id:7) ) } spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/diff-lib.sh)}) (command.ShFunction name: compare_diff body: (command.BraceGroup children: [ (command.Simple words: [{(sed)} {(-e)} {(DQ ('/^index /d'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:44) fd: -1 arg_word: {(DQ ($ Id.VSub_Number '$1'))} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:49) fd: -1 arg_word: {(.tmp-1)} ) ] ) (command.Simple words: [{(sed)} {(-e)} {(DQ ('/^index /d'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:61) fd: -1 arg_word: {(DQ ($ Id.VSub_Number '$2'))} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:66) fd: -1 arg_word: {(.tmp-2)} ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [(C {(test_cmp)} {(.tmp-1)} {(.tmp-2)}) (C {(rm)} {(-f)} {(.tmp-1)} {(.tmp-2)})] ) ] ) ) (command.ShFunction name: compare_blame body: (command.BraceGroup children: [ (command.Simple words: [ {(sed)} {(-n)} {(-e)} {(DQ ('1,4d'))} {(-e)} {(DQ ('s/^') (Id.Lit_Other '\\') ('+//p'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:121) fd: -1 arg_word: {(DQ ($ Id.VSub_Number '$1'))} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:126) fd: -1 arg_word: {(.tmp-1)} ) ] ) (command.Simple words: [{(sed)} {(-ne)} {(DQ ('s/^[^^][^)]*) *//p'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:138) fd: -1 arg_word: {(DQ ($ Id.VSub_Number '$2'))} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:143) fd: -1 arg_word: {(.tmp-2)} ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [(C {(test_cmp)} {(.tmp-1)} {(.tmp-2)}) (C {(rm)} {(-f)} {(.tmp-1)} {(.tmp-2)})] ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:prepare span_id:169))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:173) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >spaces.txt &&\n' span_id:174) (Token id:Id.Lit_Chars val:'\t1\n' span_id:175) (Token id:Id.Lit_Chars val:'\t2\n' span_id:176) (Token id:Id.Lit_Chars val:'\ta\n' span_id:177) (Token id:Id.Lit_Chars val:'\n' span_id:178) (Token id:Id.Lit_Chars val:'\tb\n' span_id:179) (Token id:Id.Lit_Chars val:'\t3\n' span_id:180) (Token id:Id.Lit_Chars val:'\t4\n' span_id:181) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:182) (Token id:Id.Lit_Chars val:'\n' span_id:183) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >functions.c &&\n' span_id:184) (Token id:Id.Lit_Chars val:'\t1\n' span_id:185) (Token id:Id.Lit_Chars val:'\t2\n' span_id:186) (Token id:Id.Lit_Chars val:'\t/* function */\n' span_id:187) (Token id:Id.Lit_Chars val:'\tfoo() {\n' span_id:188) (Token id:Id.Lit_Chars val:'\t foo\n' span_id:189) (Token id:Id.Lit_Chars val:'\t}\n' span_id:190) (Token id:Id.Lit_Chars val:'\n' span_id:191) (Token id:Id.Lit_Chars val:'\t3\n' span_id:192) (Token id:Id.Lit_Chars val:'\t4\n' span_id:193) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:194) (Token id:Id.Lit_Chars val:'\n' span_id:195) (Token id:Id.Lit_Chars val:'\tgit add spaces.txt functions.c &&\n' span_id:196) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:197) (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:198) (Token id:Id.Lit_Chars val:'\tgit branch old &&\n' span_id:199) (Token id:Id.Lit_Chars val:'\n' span_id:200) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >spaces.txt &&\n' span_id:201) (Token id:Id.Lit_Chars val:'\t1\n' span_id:202) (Token id:Id.Lit_Chars val:'\t2\n' span_id:203) (Token id:Id.Lit_Chars val:'\ta\n' span_id:204) (Token id:Id.Lit_Chars val:'\n' span_id:205) (Token id:Id.Lit_Chars val:'\tb\n' span_id:206) (Token id:Id.Lit_Chars val:'\ta\n' span_id:207) (Token id:Id.Lit_Chars val:'\n' span_id:208) (Token id:Id.Lit_Chars val:'\tb\n' span_id:209) (Token id:Id.Lit_Chars val:'\t3\n' span_id:210) (Token id:Id.Lit_Chars val:'\t4\n' span_id:211) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:212) (Token id:Id.Lit_Chars val:'\n' span_id:213) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >functions.c &&\n' span_id:214) (Token id:Id.Lit_Chars val:'\t1\n' span_id:215) (Token id:Id.Lit_Chars val:'\t2\n' span_id:216) (Token id:Id.Lit_Chars val:'\t/* function */\n' span_id:217) (Token id:Id.Lit_Chars val:'\tbar() {\n' span_id:218) (Token id:Id.Lit_Chars val:'\t foo\n' span_id:219) (Token id:Id.Lit_Chars val:'\t}\n' span_id:220) (Token id:Id.Lit_Chars val:'\n' span_id:221) (Token id:Id.Lit_Chars val:'\t/* function */\n' span_id:222) (Token id:Id.Lit_Chars val:'\tfoo() {\n' span_id:223) (Token id:Id.Lit_Chars val:'\t foo\n' span_id:224) (Token id:Id.Lit_Chars val:'\t}\n' span_id:225) (Token id:Id.Lit_Chars val:'\n' span_id:226) (Token id:Id.Lit_Chars val:'\t3\n' span_id:227) (Token id:Id.Lit_Chars val:'\t4\n' span_id:228) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:229) (Token id:Id.Lit_Chars val:'\n' span_id:230) (Token id:Id.Lit_Chars val:'\tgit add spaces.txt functions.c &&\n' span_id:231) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:232) (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:233) (Token id:Id.Lit_Chars val:'\tgit branch new &&\n' span_id:234) (Token id:Id.Lit_Chars val:'\n' span_id:235) (Token id: Id.Lit_Chars val: '\ttr "_" " " <<-\\EOF >spaces-expect &&\n' span_id: 236 ) (Token id:Id.Lit_Chars val:'\tdiff --git a/spaces.txt b/spaces.txt\n' span_id:237) (Token id:Id.Lit_Chars val:'\t--- a/spaces.txt\n' span_id:238) (Token id:Id.Lit_Chars val:'\t+++ b/spaces.txt\n' span_id:239) (Token id:Id.Lit_Chars val:'\t@@ -3,5 +3,8 @@\n' span_id:240) (Token id:Id.Lit_Chars val:'\t a\n' span_id:241) (Token id:Id.Lit_Chars val:'\t_\n' span_id:242) (Token id:Id.Lit_Chars val:'\t b\n' span_id:243) (Token id:Id.Lit_Chars val:'\t+a\n' span_id:244) (Token id:Id.Lit_Chars val:'\t+\n' span_id:245) (Token id:Id.Lit_Chars val:'\t+b\n' span_id:246) (Token id:Id.Lit_Chars val:'\t 3\n' span_id:247) (Token id:Id.Lit_Chars val:'\t 4\n' span_id:248) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:249) (Token id:Id.Lit_Chars val:'\n' span_id:250) (Token id: Id.Lit_Chars val: '\ttr "_" " " <<-\\EOF >spaces-compacted-expect &&\n' span_id: 251 ) (Token id:Id.Lit_Chars val:'\tdiff --git a/spaces.txt b/spaces.txt\n' span_id:252) (Token id:Id.Lit_Chars val:'\t--- a/spaces.txt\n' span_id:253) (Token id:Id.Lit_Chars val:'\t+++ b/spaces.txt\n' span_id:254) (Token id:Id.Lit_Chars val:'\t@@ -2,6 +2,9 @@\n' span_id:255) (Token id:Id.Lit_Chars val:'\t 2\n' span_id:256) (Token id:Id.Lit_Chars val:'\t a\n' span_id:257) (Token id:Id.Lit_Chars val:'\t_\n' span_id:258) (Token id:Id.Lit_Chars val:'\t+b\n' span_id:259) (Token id:Id.Lit_Chars val:'\t+a\n' span_id:260) (Token id:Id.Lit_Chars val:'\t+\n' span_id:261) (Token id:Id.Lit_Chars val:'\t b\n' span_id:262) (Token id:Id.Lit_Chars val:'\t 3\n' span_id:263) (Token id:Id.Lit_Chars val:'\t 4\n' span_id:264) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:265) (Token id:Id.Lit_Chars val:'\n' span_id:266) (Token id: Id.Lit_Chars val: '\ttr "_" " " <<-\\EOF >functions-expect &&\n' span_id: 267 ) (Token id:Id.Lit_Chars val:'\tdiff --git a/functions.c b/functions.c\n' span_id:268) (Token id:Id.Lit_Chars val:'\t--- a/functions.c\n' span_id:269) (Token id:Id.Lit_Chars val:'\t+++ b/functions.c\n' span_id:270) (Token id:Id.Lit_Chars val:'\t@@ -1,6 +1,11 @@\n' span_id:271) (Token id:Id.Lit_Chars val:'\t 1\n' span_id:272) (Token id:Id.Lit_Chars val:'\t 2\n' span_id:273) (Token id:Id.Lit_Chars val:'\t /* function */\n' span_id:274) (Token id:Id.Lit_Chars val:'\t+bar() {\n' span_id:275) (Token id:Id.Lit_Chars val:'\t+ foo\n' span_id:276) (Token id:Id.Lit_Chars val:'\t+}\n' span_id:277) (Token id:Id.Lit_Chars val:'\t+\n' span_id:278) (Token id:Id.Lit_Chars val:'\t+/* function */\n' span_id:279) (Token id:Id.Lit_Chars val:'\t foo() {\n' span_id:280) (Token id:Id.Lit_Chars val:'\t foo\n' span_id:281) (Token id:Id.Lit_Chars val:'\t }\n' span_id:282) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:283) (Token id:Id.Lit_Chars val:'\n' span_id:284) (Token id:Id.Lit_Chars val:'\ttr "_" " " <<-\\EOF >functions-compacted-expect\n' span_id:285) (Token id: Id.Lit_Chars val: '\tdiff --git a/functions.c b/functions.c\n' span_id: 286 ) (Token id:Id.Lit_Chars val:'\t--- a/functions.c\n' span_id:287) (Token id:Id.Lit_Chars val:'\t+++ b/functions.c\n' span_id:288) (Token id:Id.Lit_Chars val:'\t@@ -1,5 +1,10 @@\n' span_id:289) (Token id:Id.Lit_Chars val:'\t 1\n' span_id:290) (Token id:Id.Lit_Chars val:'\t 2\n' span_id:291) (Token id:Id.Lit_Chars val:'\t+/* function */\n' span_id:292) (Token id:Id.Lit_Chars val:'\t+bar() {\n' span_id:293) (Token id:Id.Lit_Chars val:'\t+ foo\n' span_id:294) (Token id:Id.Lit_Chars val:'\t+}\n' span_id:295) (Token id:Id.Lit_Chars val:'\t+\n' span_id:296) (Token id:Id.Lit_Chars val:'\t /* function */\n' span_id:297) (Token id:Id.Lit_Chars val:'\t foo() {\n' span_id:298) (Token id:Id.Lit_Chars val:'\t foo\n' span_id:299) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:300) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'diff: ugly spaces' span_id:307))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:311) (Token id: Id.Lit_Chars val: '\tgit diff old new -- spaces.txt >out &&\n' span_id: 312 ) (Token id:Id.Lit_Chars val:'\tcompare_diff spaces-expect out\n' span_id:313) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'diff: nice spaces with --indent-heuristic' span_id:320))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:324) (Token id: Id.Lit_Chars val: '\tgit diff --indent-heuristic old new -- spaces.txt >out-compacted &&\n' span_id: 325 ) (Token id:Id.Lit_Chars val:'\tcompare_diff spaces-compacted-expect out-compacted\n' span_id:326) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'diff: nice spaces with diff.indentHeuristic' span_id:333))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:337) (Token id: Id.Lit_Chars val: '\tgit -c diff.indentHeuristic=true diff old new -- spaces.txt >out-compacted2 &&\n' span_id: 338 ) (Token id:Id.Lit_Chars val:'\tcompare_diff spaces-compacted-expect out-compacted2\n' span_id:339) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'diff: --no-indent-heuristic overrides config' span_id:346))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:350) (Token id: Id.Lit_Chars val: '\tgit -c diff.indentHeuristic=true diff --no-indent-heuristic old new -- spaces.txt >out2 &&\n' span_id: 351 ) (Token id:Id.Lit_Chars val:'\tcompare_diff spaces-expect out2\n' span_id:352) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'diff: --indent-heuristic with --patience' span_id:359))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:363) (Token id: Id.Lit_Chars val: '\tgit diff --indent-heuristic --patience old new -- spaces.txt >out-compacted3 &&\n' span_id: 364 ) (Token id:Id.Lit_Chars val:'\tcompare_diff spaces-compacted-expect out-compacted3\n' span_id:365) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'diff: --indent-heuristic with --histogram' span_id:372))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:376) (Token id: Id.Lit_Chars val: '\tgit diff --indent-heuristic --histogram old new -- spaces.txt >out-compacted4 &&\n' span_id: 377 ) (Token id:Id.Lit_Chars val:'\tcompare_diff spaces-compacted-expect out-compacted4\n' span_id:378) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'diff: ugly functions' span_id:385))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:389) (Token id: Id.Lit_Chars val: '\tgit diff old new -- functions.c >out &&\n' span_id: 390 ) (Token id:Id.Lit_Chars val:'\tcompare_diff functions-expect out\n' span_id:391) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'diff: nice functions with --indent-heuristic' span_id:398))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:402) (Token id: Id.Lit_Chars val: '\tgit diff --indent-heuristic old new -- functions.c >out-compacted &&\n' span_id: 403 ) (Token id:Id.Lit_Chars val:'\tcompare_diff functions-compacted-expect out-compacted\n' span_id:404) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'blame: ugly spaces' span_id:411))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:415) (Token id: Id.Lit_Chars val: '\tgit blame old..new -- spaces.txt >out-blame &&\n' span_id: 416 ) (Token id:Id.Lit_Chars val:'\tcompare_blame spaces-expect out-blame\n' span_id:417) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'blame: nice spaces with --indent-heuristic' span_id:424))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:428) (Token id: Id.Lit_Chars val: '\tgit blame --indent-heuristic old..new -- spaces.txt >out-blame-compacted &&\n' span_id: 429 ) (Token id: Id.Lit_Chars val: '\tcompare_blame spaces-compacted-expect out-blame-compacted\n' span_id: 430 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'blame: nice spaces with diff.indentHeuristic' span_id:437))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:441) (Token id: Id.Lit_Chars val: '\tgit -c diff.indentHeuristic=true blame old..new -- spaces.txt >out-blame-compacted2 &&\n' span_id: 442 ) (Token id: Id.Lit_Chars val: '\tcompare_blame spaces-compacted-expect out-blame-compacted2\n' span_id: 443 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'blame: --no-indent-heuristic overrides config' span_id:450))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:454) (Token id: Id.Lit_Chars val: '\tgit -c diff.indentHeuristic=true blame --no-indent-heuristic old..new -- spaces.txt >out-blame2 &&\n' span_id: 455 ) (Token id:Id.Lit_Chars val:'\tgit blame old..new -- spaces.txt >out-blame &&\n' span_id:456) (Token id: Id.Lit_Chars val: '\tcompare_blame spaces-expect out-blame2\n' span_id: 457 ) ) } ) (C {(test_done)}) ] )