(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:'merging with large rename matrix' span_id:6))} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: count body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:i) op: assign_op.Equal rhs: {(1)} spids: [21] ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:25) cond: [ (command.Sentence child: (C {(test)} {($ Id.VSub_DollarName '$i')} {(-le)} {($ Id.VSub_Number '$1')}) terminator: (Token id:Id.Op_Semi val:';' span_id:34) ) ] body: (command.DoGroup children: [ (C {(echo)} {($ Id.VSub_DollarName '$i')}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:i) 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 '$i')}) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } spids: [44] ) ] ) ] ) ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup (initial)' span_id:63))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:67) (Token id:Id.Lit_Chars val:'\ttouch file &&\n' span_id:68) (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:69) (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:70) (Token id:Id.Lit_Chars val:'\tgit tag initial\n' span_id:71) ) } ) (command.ShFunction name: make_text body: (command.BraceGroup children: [ (C {(echo)} {($ Id.VSub_Number '$1') (Id.Lit_Other ':')} {($ Id.VSub_Number '$2')}) (command.ForEach iter_name: i iter_words: [ { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:96) command_list: (command.CommandList children:[(C {(count)} {(20)})]) ) } ] do_arg_iter: F body: (command.DoGroup children: [ (C {(echo)} {($ Id.VSub_Number '$1') (Id.Lit_Other ':')} {($ Id.VSub_DollarName '$i')} ) ] ) ) (C {(echo)} {($ Id.VSub_Number '$1') (Id.Lit_Other ':')} {($ Id.VSub_Number '$3')}) ] ) ) (command.ShFunction name: test_rename body: (command.BraceGroup children: [ (C {(test_expect_success)} {(DQ ('rename (') ($ Id.VSub_Number '$1') (', ') ($ Id.VSub_Number '$2') (')'))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:145) (Token id:Id.Lit_Chars val:'\tn=' span_id:146) ) ($ Id.VSub_Number '$1') (SQ (Token id:Id.Lit_Chars val:' &&\n' span_id:150) (Token id:Id.Lit_Chars val:'\texpect=' span_id:151) ) ($ Id.VSub_Number '$2') (SQ (Token id:Id.Lit_Chars val:' &&\n' span_id:155) (Token id: Id.Lit_Chars val: '\tgit checkout -f master &&\n' span_id: 156 ) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D test$n &&\n' span_id:157) (Token id: Id.Lit_Chars val: '\tgit reset --hard initial &&\n' span_id: 158 ) (Token id:Id.Lit_Chars val:'\tfor i in $(count $n); do\n' span_id:159) (Token id: Id.Lit_Chars val: '\t\tmake_text $i initial initial >$i\n' span_id: 160 ) (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:161) (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:162) (Token id:Id.Lit_Chars val:'\tgit commit -m add=$n &&\n' span_id:163) (Token id: Id.Lit_Chars val: '\tfor i in $(count $n); do\n' span_id: 164 ) (Token id:Id.Lit_Chars val:'\t\tmake_text $i changed initial >$i\n' span_id:165) (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:166) (Token id:Id.Lit_Chars val:'\tgit commit -a -m change=$n &&\n' span_id:167) (Token id: Id.Lit_Chars val: '\tgit checkout -b test$n HEAD^ &&\n' span_id: 168 ) (Token id:Id.Lit_Chars val:'\tfor i in $(count $n); do\n' span_id:169) (Token id:Id.Lit_Chars val:'\t\tgit rm $i\n' span_id:170) (Token id:Id.Lit_Chars val:'\t\tmake_text $i initial changed >$i.moved\n' span_id:171) (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:172) (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:173) (Token id: Id.Lit_Chars val: '\tgit commit -m change+rename=$n &&\n' span_id: 174 ) (Token id:Id.Lit_Chars val:'\tcase "$expect" in\n' span_id:175) (Token id: Id.Lit_Chars val: '\t\tok) git merge master ;;\n' span_id: 176 ) (Token id:Id.Lit_Chars val:'\t\t *) test_must_fail git merge master ;;\n' span_id:177) (Token id:Id.Lit_Chars val:'\tesac\n' span_id:178) (Token id:Id.Lit_Chars val:'\t' span_id:179) ) } ) ] ) ) (C {(test_rename)} {(5)} {(ok)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'set diff.renamelimit to 4' span_id:195))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:199) (Token id:Id.Lit_Chars val:'\tgit config diff.renamelimit 4\n' span_id:200) ) } ) (C {(test_rename)} {(4)} {(ok)}) (C {(test_rename)} {(5)} {(fail)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'set merge.renamelimit to 5' span_id:219))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:223) (Token id:Id.Lit_Chars val:'\tgit config merge.renamelimit 5\n' span_id:224) ) } ) (C {(test_rename)} {(5)} {(ok)}) (C {(test_rename)} {(6)} {(fail)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup large simple rename' span_id:243))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:247) (Token id: Id.Lit_Chars val: '\tgit config --unset merge.renamelimit &&\n' span_id: 248 ) (Token id:Id.Lit_Chars val:'\tgit config --unset diff.renamelimit &&\n' span_id:249) (Token id:Id.Lit_Chars val:'\n' span_id:250) (Token id:Id.Lit_Chars val:'\tgit reset --hard initial &&\n' span_id:251) (Token id:Id.Lit_Chars val:'\tfor i in $(count 200); do\n' span_id:252) (Token id:Id.Lit_Chars val:'\t\tmake_text foo bar baz >$i\n' span_id:253) (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:254) (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:255) (Token id:Id.Lit_Chars val:'\tgit commit -m create-files &&\n' span_id:256) (Token id:Id.Lit_Chars val:'\n' span_id:257) (Token id:Id.Lit_Chars val:'\tgit branch simple-change &&\n' span_id:258) (Token id:Id.Lit_Chars val:'\tgit checkout -b simple-rename &&\n' span_id:259) (Token id:Id.Lit_Chars val:'\n' span_id:260) (Token id:Id.Lit_Chars val:'\tmkdir builtin &&\n' span_id:261) (Token id:Id.Lit_Chars val:'\tgit mv [0-9]* builtin/ &&\n' span_id:262) (Token id:Id.Lit_Chars val:'\tgit commit -m renamed &&\n' span_id:263) (Token id:Id.Lit_Chars val:'\n' span_id:264) (Token id:Id.Lit_Chars val:'\tgit checkout simple-change &&\n' span_id:265) (Token id:Id.Lit_Chars val:'\t>unrelated-change &&\n' span_id:266) (Token id:Id.Lit_Chars val:'\tgit add unrelated-change &&\n' span_id:267) (Token id:Id.Lit_Chars val:'\tgit commit -m unrelated-change\n' span_id:268) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'massive simple rename does not spam added files' span_id:275))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:279) (Token id:Id.Lit_Chars val:'\tsane_unset GIT_MERGE_VERBOSITY &&\n' span_id:280) (Token id: Id.Lit_Chars val: '\tgit merge --no-stat simple-rename | grep -v Removing >output &&\n' span_id: 281 ) (Token id:Id.Lit_Chars val:'\ttest_line_count -lt 5 output\n' span_id:282) ) } ) (C {(test_done)}) ] )