t / t6032-merge-large-rename.shon commit Merge branch 'jh/status-v2-porcelain' (00d2793)
   1#!/bin/sh
   2
   3test_description='merging with large rename matrix'
   4. ./test-lib.sh
   5
   6count() {
   7        i=1
   8        while test $i -le $1; do
   9                echo $i
  10                i=$(($i + 1))
  11        done
  12}
  13
  14test_expect_success 'setup (initial)' '
  15        touch file &&
  16        git add . &&
  17        git commit -m initial &&
  18        git tag initial
  19'
  20
  21make_text() {
  22        echo $1: $2
  23        for i in $(count 20); do
  24                echo $1: $i
  25        done
  26        echo $1: $3
  27}
  28
  29test_rename() {
  30        test_expect_success "rename ($1, $2)" '
  31        n='$1' &&
  32        expect='$2' &&
  33        git checkout -f master &&
  34        test_might_fail git branch -D test$n &&
  35        git reset --hard initial &&
  36        for i in $(count $n); do
  37                make_text $i initial initial >$i
  38        done &&
  39        git add . &&
  40        git commit -m add=$n &&
  41        for i in $(count $n); do
  42                make_text $i changed initial >$i
  43        done &&
  44        git commit -a -m change=$n &&
  45        git checkout -b test$n HEAD^ &&
  46        for i in $(count $n); do
  47                git rm $i
  48                make_text $i initial changed >$i.moved
  49        done &&
  50        git add . &&
  51        git commit -m change+rename=$n &&
  52        case "$expect" in
  53                ok) git merge master ;;
  54                 *) test_must_fail git merge master ;;
  55        esac
  56        '
  57}
  58
  59test_rename 5 ok
  60
  61test_expect_success 'set diff.renamelimit to 4' '
  62        git config diff.renamelimit 4
  63'
  64test_rename 4 ok
  65test_rename 5 fail
  66
  67test_expect_success 'set merge.renamelimit to 5' '
  68        git config merge.renamelimit 5
  69'
  70test_rename 5 ok
  71test_rename 6 fail
  72
  73test_expect_success 'setup large simple rename' '
  74        git config --unset merge.renamelimit &&
  75        git config --unset diff.renamelimit &&
  76
  77        git reset --hard initial &&
  78        for i in $(count 200); do
  79                make_text foo bar baz >$i
  80        done &&
  81        git add . &&
  82        git commit -m create-files &&
  83
  84        git branch simple-change &&
  85        git checkout -b simple-rename &&
  86
  87        mkdir builtin &&
  88        git mv [0-9]* builtin/ &&
  89        git commit -m renamed &&
  90
  91        git checkout simple-change &&
  92        >unrelated-change &&
  93        git add unrelated-change &&
  94        git commit -m unrelated-change
  95'
  96
  97test_expect_success 'massive simple rename does not spam added files' '
  98        sane_unset GIT_MERGE_VERBOSITY &&
  99        git merge --no-stat simple-rename | grep -v Removing >output &&
 100        test_line_count -lt 5 output
 101'
 102
 103test_done