(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: {(SQ <'merging with large rename matrix'>)} spids: [4] ) ] ) (C {<.>} {<'./test-lib.sh'>}) (command.ShFunction name: count body: (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: <Id.KW_While while> cond: [ (command.Sentence child: (C {<test>} {($ Id.VSub_DollarName '$i')} {<-le>} {($ Id.VSub_Number '$1')}) terminator: <Id.Op_Semi _> ) ] 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: {($ Id.VSub_DollarName '$i')} right: {<Id.Lit_Digits 1>} ) ) } spids: [44] ) ] ) ] ) ) ] ) ) (C {<test_expect_success>} {(SQ <'setup (initial)'>)} { (SQ <'\n'> <'\ttouch file &&\n'> <'\tgit add . &&\n'> <'\tgit commit -m initial &&\n'> <'\tgit tag initial\n'> ) } ) (command.ShFunction name: make_text body: (BraceGroup children: [ (C {<echo>} {($ Id.VSub_Number '$1') <Id.Lit_Colon ':'>} {($ Id.VSub_Number '$2')}) (command.ForEach iter_name: i iter_words: [ {(command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<count>} {<20>}))} ] do_arg_iter: F body: (command.DoGroup children: [ (C {<echo>} {($ Id.VSub_Number '$1') <Id.Lit_Colon ':'>} {($ Id.VSub_DollarName '$i')} ) ] ) ) (C {<echo>} {($ Id.VSub_Number '$1') <Id.Lit_Colon ':'>} {($ Id.VSub_Number '$3')}) ] ) ) (command.ShFunction name: test_rename body: (BraceGroup children: [ (C {<test_expect_success>} {(DQ <'rename ('> ($ Id.VSub_Number '$1') <', '> ($ Id.VSub_Number '$2') <')'>)} {(SQ <'\n'> <'\tn='>) ($ Id.VSub_Number '$1') (SQ <' &&\n'> <'\texpect='>) ($ Id.VSub_Number '$2') (SQ <' &&\n'> <'\tgit checkout -f master &&\n'> <'\ttest_might_fail git branch -D test$n &&\n'> <'\tgit reset --hard initial &&\n'> <'\tfor i in $(count $n); do\n'> <'\t\tmake_text $i initial initial >$i\n'> <'\tdone &&\n'> <'\tgit add . &&\n'> <'\tgit commit -m add=$n &&\n'> <'\tfor i in $(count $n); do\n'> <'\t\tmake_text $i changed initial >$i\n'> <'\tdone &&\n'> <'\tgit commit -a -m change=$n &&\n'> <'\tgit checkout -b test$n HEAD^ &&\n'> <'\tfor i in $(count $n); do\n'> <'\t\tgit rm $i\n'> <'\t\tmake_text $i initial changed >$i.moved\n'> <'\tdone &&\n'> <'\tgit add . &&\n'> <'\tgit commit -m change+rename=$n &&\n'> <'\tcase "$expect" in\n'> <'\t\tok) git merge master ;;\n'> <'\t\t *) test_must_fail git merge master ;;\n'> <'\tesac\n'> <'\t'> ) } ) ] ) ) (C {<test_rename>} {<5>} {<ok>}) (C {<test_expect_success>} {(SQ <'set diff.renamelimit to 4'>)} {(SQ <'\n'> <'\tgit config diff.renamelimit 4\n'>)} ) (C {<test_rename>} {<4>} {<ok>}) (C {<test_rename>} {<5>} {<fail>}) (C {<test_expect_success>} {(SQ <'set merge.renamelimit to 5'>)} {(SQ <'\n'> <'\tgit config merge.renamelimit 5\n'>)} ) (C {<test_rename>} {<5>} {<ok>}) (C {<test_rename>} {<6>} {<fail>}) (C {<test_expect_success>} {(SQ <'setup large simple rename'>)} { (SQ <'\n'> <'\tgit config --unset merge.renamelimit &&\n'> <'\tgit config --unset diff.renamelimit &&\n'> <'\n'> <'\tgit reset --hard initial &&\n'> <'\tfor i in $(count 200); do\n'> <'\t\tmake_text foo bar baz >$i\n'> <'\tdone &&\n'> <'\tgit add . &&\n'> <'\tgit commit -m create-files &&\n'> <'\n'> <'\tgit branch simple-change &&\n'> <'\tgit checkout -b simple-rename &&\n'> <'\n'> <'\tmkdir builtin &&\n'> <'\tgit mv [0-9]* builtin/ &&\n'> <'\tgit commit -m renamed &&\n'> <'\n'> <'\tgit checkout simple-change &&\n'> <'\t>unrelated-change &&\n'> <'\tgit add unrelated-change &&\n'> <'\tgit commit -m unrelated-change\n'> ) } ) (C {<test_expect_success>} {(SQ <'massive simple rename does not spam added files'>)} { (SQ <'\n'> <'\tsane_unset GIT_MERGE_VERBOSITY &&\n'> <'\tgit merge --no-stat simple-rename | grep -v Removing >output &&\n'> <'\ttest_line_count -lt 5 output\n'> ) } ) (C {<test_done>}) ] )