]>
Commit | Line | Data |
---|---|---|
faae853c 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 |