(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: 'CRLF merge conflict across text=auto change\n' span_id: 6 ) (Token id:Id.Lit_Chars val:'\n' span_id:7) (Token id: Id.Lit_Chars val: '* [master] remove .gitattributes\n' span_id: 8 ) (Token id:Id.Lit_Chars val:' ! [side] add line from b\n' span_id:9) (Token id:Id.Lit_Chars val:'--\n' span_id:10) (Token id:Id.Lit_Chars val:' + [side] add line from b\n' span_id:11) (Token id: Id.Lit_Chars val: '* [master] remove .gitattributes\n' span_id: 12 ) (Token id:Id.Lit_Chars val:'* [master^] add line from a\n' span_id:13) (Token id: Id.Lit_Chars val: '* [master~2] normalize file\n' span_id: 14 ) (Token id:Id.Lit_Chars val:'*+ [side^] Initial\n' span_id:15) ) } spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test_have_prereq)} {(SED_STRIPS_CR)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SED_OPTIONS) op: assign_op.Equal rhs: {(-b)} spids: [30] ) ] ) ] ) (command.ShFunction name: compare_files body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (command.Simple words: [{(tr)} {(SQ (Token id:Id.Lit_Chars val:'\\015\\000' span_id:45))} {(QN)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:50) fd: -1 arg_word: {(DQ ($ Id.VSub_Number '$1'))} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:55) fd: -1 arg_word: {(DQ ($ Id.VSub_Number '$1')) (.expect)} ) ] ) (command.Simple words: [{(tr)} {(SQ (Token id:Id.Lit_Chars val:'\\015\\000' span_id:67))} {(QN)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:72) fd: -1 arg_word: {(DQ ($ Id.VSub_Number '$2'))} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:77) fd: -1 arg_word: {(DQ ($ Id.VSub_Number '$2')) (.actual)} ) ] ) (C {(test_cmp)} {(DQ ($ Id.VSub_Number '$1')) (.expect)} {(DQ ($ Id.VSub_Number '$2')) (.actual)} ) (C {(rm)} {(DQ ($ Id.VSub_Number '$1')) (.expect)} {(DQ ($ Id.VSub_Number '$2')) (.actual)} ) ] ) ] ) ) (C {(test_expect_success)} {(setup)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:121) (Token id:Id.Lit_Chars val:'\tgit config core.autocrlf false &&\n' span_id:122) (Token id:Id.Lit_Chars val:'\n' span_id:123) (Token id: Id.Lit_Chars val: '\techo first line | append_cr >file &&\n' span_id: 124 ) (Token id:Id.Lit_Chars val:'\techo first line >control_file &&\n' span_id:125) (Token id:Id.Lit_Chars val:'\techo only line >inert_file &&\n' span_id:126) (Token id:Id.Lit_Chars val:'\n' span_id:127) (Token id: Id.Lit_Chars val: '\tgit add file control_file inert_file &&\n' span_id: 128 ) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:129) (Token id:Id.Lit_Chars val:'\tgit commit -m "Initial" &&\n' span_id:130) (Token id:Id.Lit_Chars val:'\tgit tag initial &&\n' span_id:131) (Token id:Id.Lit_Chars val:'\tgit branch side &&\n' span_id:132) (Token id:Id.Lit_Chars val:'\n' span_id:133) (Token id: Id.Lit_Chars val: '\techo "* text=auto" >.gitattributes &&\n' span_id: 134 ) (Token id:Id.Lit_Chars val:'\techo first line >file &&\n' span_id:135) (Token id:Id.Lit_Chars val:'\tgit add .gitattributes file &&\n' span_id:136) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:137) (Token id:Id.Lit_Chars val:'\tgit commit -m "normalize file" &&\n' span_id:138) (Token id:Id.Lit_Chars val:'\n' span_id:139) (Token id: Id.Lit_Chars val: '\techo same line | append_cr >>file &&\n' span_id: 140 ) (Token id:Id.Lit_Chars val:'\techo same line >>control_file &&\n' span_id:141) (Token id:Id.Lit_Chars val:'\tgit add file control_file &&\n' span_id:142) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:143) (Token id:Id.Lit_Chars val:'\tgit commit -m "add line from a" &&\n' span_id:144) (Token id:Id.Lit_Chars val:'\tgit tag a &&\n' span_id:145) (Token id:Id.Lit_Chars val:'\n' span_id:146) (Token id:Id.Lit_Chars val:'\tgit rm .gitattributes &&\n' span_id:147) (Token id:Id.Lit_Chars val:'\trm file &&\n' span_id:148) (Token id:Id.Lit_Chars val:'\tgit checkout file &&\n' span_id:149) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:150) (Token id:Id.Lit_Chars val:'\tgit commit -m "remove .gitattributes" &&\n' span_id:151) (Token id:Id.Lit_Chars val:'\tgit tag c &&\n' span_id:152) (Token id:Id.Lit_Chars val:'\n' span_id:153) (Token id:Id.Lit_Chars val:'\tgit checkout side &&\n' span_id:154) (Token id:Id.Lit_Chars val:'\techo same line | append_cr >>file &&\n' span_id:155) (Token id:Id.Lit_Chars val:'\techo same line >>control_file &&\n' span_id:156) (Token id:Id.Lit_Chars val:'\tgit add file control_file &&\n' span_id:157) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:158) (Token id:Id.Lit_Chars val:'\tgit commit -m "add line from b" &&\n' span_id:159) (Token id:Id.Lit_Chars val:'\tgit tag b &&\n' span_id:160) (Token id:Id.Lit_Chars val:'\n' span_id:161) (Token id:Id.Lit_Chars val:'\tgit checkout master\n' span_id:162) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'set up fuzz_conflict() helper' span_id:169))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:173) (Token id:Id.Lit_Chars val:'\tfuzz_conflict() {\n' span_id:174) (Token id: Id.Lit_Chars val: '\t\tsed $SED_OPTIONS -e "s/^\\([<>=]......\\) .*/\\1/" "$@"\n' span_id: 175 ) (Token id:Id.Lit_Chars val:'\t}\n' span_id:176) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Merge after setting text=auto' span_id:183))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:187) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >expected &&\n' span_id:188) (Token id:Id.Lit_Chars val:'\tfirst line\n' span_id:189) (Token id:Id.Lit_Chars val:'\tsame line\n' span_id:190) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:191) (Token id:Id.Lit_Chars val:'\n' span_id:192) (Token id: Id.Lit_Chars val: '\tif test_have_prereq NATIVE_CRLF; then\n' span_id: 193 ) (Token id:Id.Lit_Chars val:'\t\tappend_cr <expected >expected.temp &&\n' span_id:194) (Token id:Id.Lit_Chars val:'\t\tmv expected.temp expected\n' span_id:195) (Token id:Id.Lit_Chars val:'\tfi &&\n' span_id:196) (Token id: Id.Lit_Chars val: '\tgit config merge.renormalize true &&\n' span_id: 197 ) (Token id:Id.Lit_Chars val:'\tgit rm -fr . &&\n' span_id:198) (Token id:Id.Lit_Chars val:'\trm -f .gitattributes &&\n' span_id:199) (Token id:Id.Lit_Chars val:'\tgit reset --hard a &&\n' span_id:200) (Token id:Id.Lit_Chars val:'\tgit merge b &&\n' span_id:201) (Token id:Id.Lit_Chars val:'\tcompare_files expected file\n' span_id:202) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Merge addition of text=auto eol=LF' span_id:209))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:213) (Token id:Id.Lit_Chars val:'\tgit config core.eol lf &&\n' span_id:214) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >expected &&\n' span_id:215) (Token id:Id.Lit_Chars val:'\tfirst line\n' span_id:216) (Token id:Id.Lit_Chars val:'\tsame line\n' span_id:217) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:218) (Token id:Id.Lit_Chars val:'\n' span_id:219) (Token id: Id.Lit_Chars val: '\tgit config merge.renormalize true &&\n' span_id: 220 ) (Token id:Id.Lit_Chars val:'\tgit rm -fr . &&\n' span_id:221) (Token id:Id.Lit_Chars val:'\trm -f .gitattributes &&\n' span_id:222) (Token id:Id.Lit_Chars val:'\tgit reset --hard b &&\n' span_id:223) (Token id:Id.Lit_Chars val:'\tgit merge a &&\n' span_id:224) (Token id:Id.Lit_Chars val:'\tcompare_files expected file\n' span_id:225) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Merge addition of text=auto eol=CRLF' span_id:232))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:236) (Token id:Id.Lit_Chars val:'\tgit config core.eol crlf &&\n' span_id:237) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >expected &&\n' span_id:238) (Token id:Id.Lit_Chars val:'\tfirst line\n' span_id:239) (Token id:Id.Lit_Chars val:'\tsame line\n' span_id:240) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:241) (Token id:Id.Lit_Chars val:'\n' span_id:242) (Token id: Id.Lit_Chars val: '\tappend_cr <expected >expected.temp &&\n' span_id: 243 ) (Token id:Id.Lit_Chars val:'\tmv expected.temp expected &&\n' span_id:244) (Token id: Id.Lit_Chars val: '\tgit config merge.renormalize true &&\n' span_id: 245 ) (Token id:Id.Lit_Chars val:'\tgit rm -fr . &&\n' span_id:246) (Token id:Id.Lit_Chars val:'\trm -f .gitattributes &&\n' span_id:247) (Token id:Id.Lit_Chars val:'\tgit reset --hard b &&\n' span_id:248) (Token id: Id.Lit_Chars val: '\techo >&2 "After git reset --hard b" &&\n' span_id: 249 ) (Token id:Id.Lit_Chars val:'\tgit ls-files -s --eol >&2 &&\n' span_id:250) (Token id:Id.Lit_Chars val:'\tgit merge a &&\n' span_id:251) (Token id:Id.Lit_Chars val:'\tcompare_files expected file\n' span_id:252) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Detect CRLF/LF conflict after setting text=auto' span_id:259))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:263) (Token id:Id.Lit_Chars val:'\tgit config core.eol native &&\n' span_id:264) (Token id:Id.Lit_Chars val:'\techo "<<<<<<<" >expected &&\n' span_id:265) (Token id:Id.Lit_Chars val:'\techo first line >>expected &&\n' span_id:266) (Token id:Id.Lit_Chars val:'\techo same line >>expected &&\n' span_id:267) (Token id:Id.Lit_Chars val:'\techo ======= >>expected &&\n' span_id:268) (Token id:Id.Lit_Chars val:'\techo first line | append_cr >>expected &&\n' span_id:269) (Token id: Id.Lit_Chars val: '\techo same line | append_cr >>expected &&\n' span_id: 270 ) (Token id:Id.Lit_Chars val:'\techo ">>>>>>>" >>expected &&\n' span_id:271) (Token id: Id.Lit_Chars val: '\tgit config merge.renormalize false &&\n' span_id: 272 ) (Token id:Id.Lit_Chars val:'\trm -f .gitattributes &&\n' span_id:273) (Token id:Id.Lit_Chars val:'\tgit reset --hard a &&\n' span_id:274) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge b &&\n' span_id:275) (Token id:Id.Lit_Chars val:'\tfuzz_conflict file >file.fuzzy &&\n' span_id:276) (Token id:Id.Lit_Chars val:'\tcompare_files expected file.fuzzy\n' span_id:277) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'Detect LF/CRLF conflict from addition of text=auto' span_id: 284 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:288) (Token id:Id.Lit_Chars val:'\techo "<<<<<<<" >expected &&\n' span_id:289) (Token id:Id.Lit_Chars val:'\techo first line | append_cr >>expected &&\n' span_id:290) (Token id: Id.Lit_Chars val: '\techo same line | append_cr >>expected &&\n' span_id: 291 ) (Token id:Id.Lit_Chars val:'\techo ======= >>expected &&\n' span_id:292) (Token id:Id.Lit_Chars val:'\techo first line >>expected &&\n' span_id:293) (Token id:Id.Lit_Chars val:'\techo same line >>expected &&\n' span_id:294) (Token id:Id.Lit_Chars val:'\techo ">>>>>>>" >>expected &&\n' span_id:295) (Token id:Id.Lit_Chars val:'\tgit config merge.renormalize false &&\n' span_id:296) (Token id:Id.Lit_Chars val:'\trm -f .gitattributes &&\n' span_id:297) (Token id:Id.Lit_Chars val:'\tgit reset --hard b &&\n' span_id:298) (Token id:Id.Lit_Chars val:'\ttest_must_fail git merge a &&\n' span_id:299) (Token id:Id.Lit_Chars val:'\tfuzz_conflict file >file.fuzzy &&\n' span_id:300) (Token id:Id.Lit_Chars val:'\tcompare_files expected file.fuzzy\n' span_id:301) ) } ) (C {(test_expect_failure)} {(SQ (Token id:Id.Lit_Chars val:'checkout -m after setting text=auto' span_id:308))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:312) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >expected &&\n' span_id:313) (Token id:Id.Lit_Chars val:'\tfirst line\n' span_id:314) (Token id:Id.Lit_Chars val:'\tsame line\n' span_id:315) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:316) (Token id:Id.Lit_Chars val:'\n' span_id:317) (Token id: Id.Lit_Chars val: '\tgit config merge.renormalize true &&\n' span_id: 318 ) (Token id:Id.Lit_Chars val:'\tgit rm -fr . &&\n' span_id:319) (Token id:Id.Lit_Chars val:'\trm -f .gitattributes &&\n' span_id:320) (Token id:Id.Lit_Chars val:'\tgit reset --hard initial &&\n' span_id:321) (Token id:Id.Lit_Chars val:'\tgit checkout a -- . &&\n' span_id:322) (Token id:Id.Lit_Chars val:'\tgit checkout -m b &&\n' span_id:323) (Token id:Id.Lit_Chars val:'\tcompare_files expected file\n' span_id:324) ) } ) (C {(test_expect_failure)} {(SQ (Token id:Id.Lit_Chars val:'checkout -m addition of text=auto' span_id:331))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:335) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >expected &&\n' span_id:336) (Token id:Id.Lit_Chars val:'\tfirst line\n' span_id:337) (Token id:Id.Lit_Chars val:'\tsame line\n' span_id:338) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:339) (Token id:Id.Lit_Chars val:'\n' span_id:340) (Token id: Id.Lit_Chars val: '\tgit config merge.renormalize true &&\n' span_id: 341 ) (Token id:Id.Lit_Chars val:'\tgit rm -fr . &&\n' span_id:342) (Token id:Id.Lit_Chars val:'\trm -f .gitattributes file &&\n' span_id:343) (Token id:Id.Lit_Chars val:'\tgit reset --hard initial &&\n' span_id:344) (Token id:Id.Lit_Chars val:'\tgit checkout b -- . &&\n' span_id:345) (Token id:Id.Lit_Chars val:'\tgit checkout -m a &&\n' span_id:346) (Token id:Id.Lit_Chars val:'\tcompare_files expected file\n' span_id:347) ) } ) (C {(test_expect_failure)} { (SQ (Token id: Id.Lit_Chars val: 'cherry-pick patch from after text=auto was added' span_id: 354 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:358) (Token id:Id.Lit_Chars val:'\tappend_cr <<-\\EOF >expected &&\n' span_id:359) (Token id:Id.Lit_Chars val:'\tfirst line\n' span_id:360) (Token id:Id.Lit_Chars val:'\tsame line\n' span_id:361) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:362) (Token id:Id.Lit_Chars val:'\n' span_id:363) (Token id: Id.Lit_Chars val: '\tgit config merge.renormalize true &&\n' span_id: 364 ) (Token id:Id.Lit_Chars val:'\tgit rm -fr . &&\n' span_id:365) (Token id:Id.Lit_Chars val:'\tgit reset --hard b &&\n' span_id:366) (Token id:Id.Lit_Chars val:'\ttest_must_fail git cherry-pick a >err 2>&1 &&\n' span_id:367) (Token id:Id.Lit_Chars val:'\tgrep "[Nn]othing added" err &&\n' span_id:368) (Token id:Id.Lit_Chars val:'\tcompare_files expected file\n' span_id:369) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Test delete/normalize conflict' span_id:376))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:380) (Token id:Id.Lit_Chars val:'\tgit checkout -f side &&\n' span_id:381) (Token id:Id.Lit_Chars val:'\tgit rm -fr . &&\n' span_id:382) (Token id:Id.Lit_Chars val:'\trm -f .gitattributes &&\n' span_id:383) (Token id:Id.Lit_Chars val:'\tgit reset --hard initial &&\n' span_id:384) (Token id:Id.Lit_Chars val:'\tgit rm file &&\n' span_id:385) (Token id:Id.Lit_Chars val:'\tgit commit -m "remove file" &&\n' span_id:386) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:387) (Token id:Id.Lit_Chars val:'\tgit reset --hard a^ &&\n' span_id:388) (Token id:Id.Lit_Chars val:'\tgit merge side\n' span_id:389) ) } ) (C {(test_done)}) ] )