Merge branch 'mm/maint-sort-config-doc' into mm/sort-config-doc
[git] / t / t3410-rebase-preserve-dropped-merges.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2008 Stephen Haberman
4 #
5
6 test_description='git rebase preserve merges
7
8 This test runs git rebase with preserve merges and ensures commits
9 dropped by the --cherry-pick flag have their childrens parents
10 rewritten.
11 '
12 . ./test-lib.sh
13
14 # set up two branches like this:
15 #
16 # A - B - C - D - E
17 #   \
18 #     F - G - H
19 #       \
20 #         I
21 #
22 # where B, D and G touch the same file.
23
24 test_expect_success 'setup' '
25         : > file1 &&
26         git add file1 &&
27         test_tick &&
28         git commit -m A &&
29         git tag A &&
30         echo 1 > file1 &&
31         test_tick &&
32         git commit -m B file1 &&
33         : > file2 &&
34         git add file2 &&
35         test_tick &&
36         git commit -m C &&
37         echo 2 > file1 &&
38         test_tick &&
39         git commit -m D file1 &&
40         : > file3 &&
41         git add file3 &&
42         test_tick &&
43         git commit -m E &&
44         git tag E &&
45         git checkout -b branch1 A &&
46         : > file4 &&
47         git add file4 &&
48         test_tick &&
49         git commit -m F &&
50         git tag F &&
51         echo 3 > file1 &&
52         test_tick &&
53         git commit -m G file1 &&
54         git tag G &&
55         : > file5 &&
56         git add file5 &&
57         test_tick &&
58         git commit -m H &&
59         git tag H &&
60         git checkout -b branch2 F &&
61         : > file6 &&
62         git add file6 &&
63         test_tick &&
64         git commit -m I &&
65         git tag I
66 '
67
68 # A - B - C - D - E
69 #   \             \ \
70 #     F - G - H -- L \        -->   L
71 #       \            |               \
72 #         I -- G2 -- J -- K           I -- K
73 # G2 = same changes as G
74 test_expect_success 'skip same-resolution merges with -p' '
75         git checkout branch1 &&
76         ! git merge E &&
77         echo 23 > file1 &&
78         git add file1 &&
79         git commit -m L &&
80         git checkout branch2 &&
81         echo 3 > file1 &&
82         git commit -a -m G2 &&
83         ! git merge E &&
84         echo 23 > file1 &&
85         git add file1 &&
86         git commit -m J &&
87         echo file7 > file7 &&
88         git add file7 &&
89         git commit -m K &&
90         GIT_EDITOR=: git rebase -i -p branch1 &&
91         test $(git rev-parse branch2^^) = $(git rev-parse branch1) &&
92         test "23" = "$(cat file1)" &&
93         test "" = "$(cat file6)" &&
94         test "file7" = "$(cat file7)" &&
95
96         git checkout branch1 &&
97         git reset --hard H &&
98         git checkout branch2 &&
99         git reset --hard I
100 '
101
102 # A - B - C - D - E
103 #   \             \ \
104 #     F - G - H -- L \        -->   L
105 #       \            |               \
106 #         I -- G2 -- J -- K           I -- G2 -- K
107 # G2 = different changes as G
108 test_expect_success 'keep different-resolution merges with -p' '
109         git checkout branch1 &&
110         ! git merge E &&
111         echo 23 > file1 &&
112         git add file1 &&
113         git commit -m L &&
114         git checkout branch2 &&
115         echo 4 > file1 &&
116         git commit -a -m G2 &&
117         ! git merge E &&
118         echo 24 > file1 &&
119         git add file1 &&
120         git commit -m J &&
121         echo file7 > file7 &&
122         git add file7 &&
123         git commit -m K &&
124         ! GIT_EDITOR=: git rebase -i -p branch1 &&
125         echo 234 > file1 &&
126         git add file1 &&
127         GIT_EDITOR=: git rebase --continue &&
128         test $(git rev-parse branch2^^^) = $(git rev-parse branch1) &&
129         test "234" = "$(cat file1)" &&
130         test "" = "$(cat file6)" &&
131         test "file7" = "$(cat file7)" &&
132
133         git checkout branch1 &&
134         git reset --hard H &&
135         git checkout branch2 &&
136         git reset --hard I
137 '
138
139 test_done