(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: 'applying patch that has broken whitespaces in context' span_id: 6 ) ) } spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(setup)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:20) (Token id:Id.Lit_Chars val:'\n' span_id:21) (Token id:Id.Lit_Chars val:'\t>file &&\n' span_id:22) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:23) (Token id:Id.Lit_Chars val:'\n' span_id:24) (Token id:Id.Lit_Chars val:'\t# file-0 is full of whitespace breakages\n' span_id:25) (Token id:Id.Lit_Chars val:'\tfor l in a bb c d eeee f ggg h\n' span_id:26) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:27) (Token id:Id.Lit_Chars val:'\t\techo "$l "\n' span_id:28) (Token id:Id.Lit_Chars val:'\tdone >file-0 &&\n' span_id:29) (Token id:Id.Lit_Chars val:'\n' span_id:30) (Token id:Id.Lit_Chars val:'\t# patch-0 creates a whitespace broken file\n' span_id:31) (Token id:Id.Lit_Chars val:'\tcat file-0 >file &&\n' span_id:32) (Token id:Id.Lit_Chars val:'\tgit diff >patch-0 &&\n' span_id:33) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:34) (Token id:Id.Lit_Chars val:'\n' span_id:35) (Token id: Id.Lit_Chars val: '\t# file-1 is still full of whitespace breakages,\n' span_id: 36 ) (Token id:Id.Lit_Chars val:'\t# but has one line updated, without fixing any\n' span_id:37) (Token id:Id.Lit_Chars val:'\t# whitespaces.\n' span_id:38) (Token id:Id.Lit_Chars val:'\t# patch-1 records that change.\n' span_id:39) (Token id:Id.Lit_Chars val:'\tsed -e "s/d/D/" file-0 >file-1 &&\n' span_id:40) (Token id:Id.Lit_Chars val:'\tcat file-1 >file &&\n' span_id:41) (Token id:Id.Lit_Chars val:'\tgit diff >patch-1 &&\n' span_id:42) (Token id:Id.Lit_Chars val:'\n' span_id:43) (Token id: Id.Lit_Chars val: '\t# patch-all is the effect of both patch-0 and patch-1\n' span_id: 44 ) (Token id:Id.Lit_Chars val:'\t>file &&\n' span_id:45) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:46) (Token id:Id.Lit_Chars val:'\tcat file-1 >file &&\n' span_id:47) (Token id:Id.Lit_Chars val:'\tgit diff >patch-all &&\n' span_id:48) (Token id:Id.Lit_Chars val:'\n' span_id:49) (Token id: Id.Lit_Chars val: '\t# patch-2 is the same as patch-1 but is based\n' span_id: 50 ) (Token id:Id.Lit_Chars val:'\t# on a version that already has whitespace fixed,\n' span_id:51) (Token id: Id.Lit_Chars val: '\t# and does not introduce whitespace breakages.\n' span_id: 52 ) (Token id:Id.Lit_Chars val:'\tsed -e "s/ \\$//" patch-1 >patch-2 &&\n' span_id:53) (Token id:Id.Lit_Chars val:'\n' span_id:54) (Token id:Id.Lit_Chars val:'\t# If all whitespace breakages are fixed the contents\n' span_id:55) (Token id:Id.Lit_Chars val:'\t# should look like file-fixed\n' span_id:56) (Token id:Id.Lit_Chars val:'\tsed -e "s/ \\$//" file-1 >file-fixed\n' span_id:57) (Token id:Id.Lit_Chars val:'\n' span_id:58) ) } ) (C {(test_expect_success)} {(nofix)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:67) (Token id:Id.Lit_Chars val:'\n' span_id:68) (Token id:Id.Lit_Chars val:'\t>file &&\n' span_id:69) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:70) (Token id:Id.Lit_Chars val:'\n' span_id:71) (Token id:Id.Lit_Chars val:'\t# Baseline. Applying without fixing any whitespace\n' span_id:72) (Token id:Id.Lit_Chars val:'\t# breakages.\n' span_id:73) (Token id:Id.Lit_Chars val:'\tgit apply --whitespace=nowarn patch-0 &&\n' span_id:74) (Token id: Id.Lit_Chars val: '\tgit apply --whitespace=nowarn patch-1 &&\n' span_id: 75 ) (Token id:Id.Lit_Chars val:'\n' span_id:76) (Token id:Id.Lit_Chars val:'\t# The result should obviously match.\n' span_id:77) (Token id:Id.Lit_Chars val:'\ttest_cmp file-1 file\n' span_id:78) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'withfix (forward)' span_id:85))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:89) (Token id:Id.Lit_Chars val:'\n' span_id:90) (Token id:Id.Lit_Chars val:'\t>file &&\n' span_id:91) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:92) (Token id:Id.Lit_Chars val:'\n' span_id:93) (Token id:Id.Lit_Chars val:'\t# The first application will munge the context lines\n' span_id:94) (Token id: Id.Lit_Chars val: '\t# the second patch depends on. We should be able to\n' span_id: 95 ) (Token id:Id.Lit_Chars val:'\t# adjust and still apply.\n' span_id:96) (Token id: Id.Lit_Chars val: '\tgit apply --whitespace=fix patch-0 &&\n' span_id: 97 ) (Token id:Id.Lit_Chars val:'\tgit apply --whitespace=fix patch-1 &&\n' span_id:98) (Token id:Id.Lit_Chars val:'\n' span_id:99) (Token id:Id.Lit_Chars val:'\ttest_cmp file-fixed file\n' span_id:100) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'withfix (backward)' span_id:107))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:111) (Token id:Id.Lit_Chars val:'\n' span_id:112) (Token id:Id.Lit_Chars val:'\t>file &&\n' span_id:113) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:114) (Token id:Id.Lit_Chars val:'\n' span_id:115) (Token id:Id.Lit_Chars val:'\t# Now we have a whitespace breakages on our side.\n' span_id:116) (Token id: Id.Lit_Chars val: '\tgit apply --whitespace=nowarn patch-0 &&\n' span_id: 117 ) (Token id:Id.Lit_Chars val:'\n' span_id:118) (Token id: Id.Lit_Chars val: '\t# And somebody sends in a patch based on image\n' span_id: 119 ) (Token id:Id.Lit_Chars val:'\t# with whitespace already fixed.\n' span_id:120) (Token id: Id.Lit_Chars val: '\tgit apply --whitespace=fix patch-2 &&\n' span_id: 121 ) (Token id:Id.Lit_Chars val:'\n' span_id:122) (Token id: Id.Lit_Chars val: '\t# The result should accept the whitespace fixed\n' span_id: 123 ) (Token id:Id.Lit_Chars val:'\t# postimage. But the line with "h" is beyond context\n' span_id:124) (Token id:Id.Lit_Chars val:'\t# horizon and left unfixed.\n' span_id:125) (Token id:Id.Lit_Chars val:'\n' span_id:126) (Token id: Id.Lit_Chars val: '\tsed -e /h/d file-fixed >fixed-head &&\n' span_id: 127 ) (Token id:Id.Lit_Chars val:'\tsed -e /h/d file >file-head &&\n' span_id:128) (Token id:Id.Lit_Chars val:'\ttest_cmp fixed-head file-head &&\n' span_id:129) (Token id:Id.Lit_Chars val:'\n' span_id:130) (Token id: Id.Lit_Chars val: '\tsed -n -e /h/p file-fixed >fixed-tail &&\n' span_id: 131 ) (Token id:Id.Lit_Chars val:'\tsed -n -e /h/p file >file-tail &&\n' span_id:132) (Token id:Id.Lit_Chars val:'\n' span_id:133) (Token id:Id.Lit_Chars val:'\t! test_cmp fixed-tail file-tail\n' span_id:134) (Token id:Id.Lit_Chars val:'\n' span_id:135) ) } ) (C {(test_done)}) ] )