Merge tag 'l10n-2.26.0-rnd2.1' of git://github.com/git-l10n/git-po.git
[git] / t / t3419-rebase-patch-id.sh
1 #!/bin/sh
2
3 test_description='git rebase - test patch id computation'
4
5 . ./test-lib.sh
6
7 count () {
8         i=0
9         while test $i -lt $1
10         do
11                 echo "$i"
12                 i=$(($i+1))
13         done
14 }
15
16 scramble () {
17         i=0
18         while read x
19         do
20                 if test $i -ne 0
21                 then
22                         echo "$x"
23                 fi
24                 i=$((($i+1) % 10))
25         done <"$1" >"$1.new"
26         mv -f "$1.new" "$1"
27 }
28
29 run () {
30         echo \$ "$@"
31         /usr/bin/time "$@" >/dev/null
32 }
33
34 test_expect_success 'setup' '
35         git commit --allow-empty -m initial &&
36         git tag root
37 '
38
39 do_tests () {
40         nlines=$1 pr=${2-}
41
42         test_expect_success $pr "setup: $nlines lines" "
43                 rm -f .gitattributes &&
44                 git checkout -q -f master &&
45                 git reset --hard root &&
46                 count $nlines >file &&
47                 git add file &&
48                 git commit -q -m initial &&
49                 git branch -f other &&
50
51                 scramble file &&
52                 git add file &&
53                 git commit -q -m 'change big file' &&
54
55                 git checkout -q other &&
56                 : >newfile &&
57                 git add newfile &&
58                 git commit -q -m 'add small file' &&
59
60                 git cherry-pick master >/dev/null 2>&1
61         "
62
63         test_debug "
64                 run git diff master^\!
65         "
66
67         test_expect_success $pr 'setup attributes' "
68                 echo 'file binary' >.gitattributes
69         "
70
71         test_debug "
72                 run git format-patch --stdout master &&
73                 run git format-patch --stdout --ignore-if-in-upstream master
74         "
75
76         test_expect_success $pr 'detect upstream patch' '
77                 git checkout -q master &&
78                 scramble file &&
79                 git add file &&
80                 git commit -q -m "change big file again" &&
81                 git checkout -q other^{} &&
82                 git rebase master &&
83                 git rev-list master...HEAD~ >revs &&
84                 test_must_be_empty revs
85         '
86
87         test_expect_success $pr 'do not drop patch' '
88                 git branch -f squashed master &&
89                 git checkout -q -f squashed &&
90                 git reset -q --soft HEAD~2 &&
91                 git commit -q -m squashed &&
92                 git checkout -q other^{} &&
93                 test_must_fail git rebase squashed &&
94                 rm -rf .git/rebase-apply
95         '
96 }
97
98 do_tests 500
99 do_tests 50000 EXPENSIVE
100
101 test_done