(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: 'git apply handling criss-cross rename patch.' span_id: 6 ) ) } spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: create_file body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cnt) op: assign_op.Equal rhs: {(0)} spids: [21] ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:25) cond: [(C {(test)} {($ Id.VSub_DollarName '$cnt')} {(-le)} {(100)})] body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cnt) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$cnt')}) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } spids: [39] ) ] ) (command.Simple words: [{(echo)} {(DQ ($ Id.VSub_Number '$2'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:56) fd: -1 arg_word: {(DQ ($ Id.VSub_Number '$1'))} ) ] ) ] ) ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:71))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:75) (Token id: Id.Lit_Chars val: '\t# Ensure that file sizes are different, because on Windows\n' span_id: 76 ) (Token id:Id.Lit_Chars val:'\t# lstat() does not discover inode numbers, and we need\n' span_id:77) (Token id: Id.Lit_Chars val: '\t# other properties to discover swapped files\n' span_id: 78 ) (Token id:Id.Lit_Chars val:'\t# (mtime is not always different, either).\n' span_id:79) (Token id:Id.Lit_Chars val:'\tcreate_file file1 "some content" &&\n' span_id:80) (Token id:Id.Lit_Chars val:'\tcreate_file file2 "some other content" &&\n' span_id:81) (Token id: Id.Lit_Chars val: '\tcreate_file file3 "again something else" &&\n' span_id: 82 ) (Token id:Id.Lit_Chars val:'\tgit add file1 file2 file3 &&\n' span_id:83) (Token id:Id.Lit_Chars val:'\tgit commit -m 1\n' span_id:84) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'criss-cross rename' span_id:91))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:95) (Token id:Id.Lit_Chars val:'\tmv file1 tmp &&\n' span_id:96) (Token id:Id.Lit_Chars val:'\tmv file2 file1 &&\n' span_id:97) (Token id:Id.Lit_Chars val:'\tmv tmp file2 &&\n' span_id:98) (Token id:Id.Lit_Chars val:'\tcp file1 file1-swapped &&\n' span_id:99) (Token id:Id.Lit_Chars val:'\tcp file2 file2-swapped\n' span_id:100) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'diff -M -B' span_id:107))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:111) (Token id:Id.Lit_Chars val:'\tgit diff -M -B > diff &&\n' span_id:112) (Token id:Id.Lit_Chars val:'\tgit reset --hard\n' span_id:113) (Token id:Id.Lit_Chars val:'\n' span_id:114) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:apply span_id:121))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:125) (Token id:Id.Lit_Chars val:'\tgit apply diff &&\n' span_id:126) (Token id:Id.Lit_Chars val:'\ttest_cmp file1 file1-swapped &&\n' span_id:127) (Token id:Id.Lit_Chars val:'\ttest_cmp file2 file2-swapped\n' span_id:128) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'criss-cross rename' span_id:135))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:139) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:140) (Token id:Id.Lit_Chars val:'\tmv file1 tmp &&\n' span_id:141) (Token id:Id.Lit_Chars val:'\tmv file2 file1 &&\n' span_id:142) (Token id:Id.Lit_Chars val:'\tmv file3 file2 &&\n' span_id:143) (Token id:Id.Lit_Chars val:'\tmv tmp file3 &&\n' span_id:144) (Token id:Id.Lit_Chars val:'\tcp file1 file1-swapped &&\n' span_id:145) (Token id:Id.Lit_Chars val:'\tcp file2 file2-swapped &&\n' span_id:146) (Token id:Id.Lit_Chars val:'\tcp file3 file3-swapped\n' span_id:147) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'diff -M -B' span_id:154))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:158) (Token id:Id.Lit_Chars val:'\tgit diff -M -B > diff &&\n' span_id:159) (Token id:Id.Lit_Chars val:'\tgit reset --hard\n' span_id:160) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:apply span_id:167))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:171) (Token id:Id.Lit_Chars val:'\tgit apply diff &&\n' span_id:172) (Token id:Id.Lit_Chars val:'\ttest_cmp file1 file1-swapped &&\n' span_id:173) (Token id:Id.Lit_Chars val:'\ttest_cmp file2 file2-swapped &&\n' span_id:174) (Token id:Id.Lit_Chars val:'\ttest_cmp file3 file3-swapped\n' span_id:175) ) } ) (C {(test_done)}) ] )