Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | |
| 3 | test_description='merge-recursive backend test' |
| 4 | |
| 5 | . ./test-lib.sh |
| 6 | |
| 7 | test_expect_success 'setup 1' ' |
| 8 | |
| 9 | echo hello >a && |
| 10 | o0=$(git hash-object a) && |
| 11 | cp a b && |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 12 | cp a c && |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 13 | mkdir d && |
| 14 | cp a d/e && |
| 15 | |
| 16 | test_tick && |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 17 | git add a b c d/e && |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 18 | git commit -m initial && |
| 19 | c0=$(git rev-parse --verify HEAD) && |
| 20 | git branch side && |
| 21 | git branch df-1 && |
| 22 | git branch df-2 && |
| 23 | git branch df-3 && |
| 24 | git branch remove && |
| 25 | |
| 26 | echo hello >>a && |
| 27 | cp a d/e && |
| 28 | o1=$(git hash-object a) && |
| 29 | |
| 30 | git add a d/e && |
| 31 | |
| 32 | test_tick && |
| 33 | git commit -m "master modifies a and d/e" && |
| 34 | c1=$(git rev-parse --verify HEAD) && |
| 35 | ( git ls-tree -r HEAD ; git ls-files -s ) >actual && |
| 36 | ( |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 37 | echo "100644 blob $o1 a" |
| 38 | echo "100644 blob $o0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 39 | echo "100644 blob $o0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 40 | echo "100644 blob $o1 d/e" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 41 | echo "100644 $o1 0 a" |
| 42 | echo "100644 $o0 0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 43 | echo "100644 $o0 0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 44 | echo "100644 $o1 0 d/e" |
| 45 | ) >expected && |
Junio C Hamano | 3af8286 | 2008-05-23 22:28:56 -0700 | [diff] [blame] | 46 | test_cmp expected actual |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 47 | ' |
| 48 | |
| 49 | test_expect_success 'setup 2' ' |
| 50 | |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 51 | rm -rf [abcd] && |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 52 | git checkout side && |
| 53 | ( git ls-tree -r HEAD ; git ls-files -s ) >actual && |
| 54 | ( |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 55 | echo "100644 blob $o0 a" |
| 56 | echo "100644 blob $o0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 57 | echo "100644 blob $o0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 58 | echo "100644 blob $o0 d/e" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 59 | echo "100644 $o0 0 a" |
| 60 | echo "100644 $o0 0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 61 | echo "100644 $o0 0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 62 | echo "100644 $o0 0 d/e" |
| 63 | ) >expected && |
Junio C Hamano | 3af8286 | 2008-05-23 22:28:56 -0700 | [diff] [blame] | 64 | test_cmp expected actual && |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 65 | |
| 66 | echo goodbye >>a && |
| 67 | o2=$(git hash-object a) && |
| 68 | |
| 69 | git add a && |
| 70 | |
| 71 | test_tick && |
| 72 | git commit -m "side modifies a" && |
| 73 | c2=$(git rev-parse --verify HEAD) && |
| 74 | ( git ls-tree -r HEAD ; git ls-files -s ) >actual && |
| 75 | ( |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 76 | echo "100644 blob $o2 a" |
| 77 | echo "100644 blob $o0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 78 | echo "100644 blob $o0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 79 | echo "100644 blob $o0 d/e" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 80 | echo "100644 $o2 0 a" |
| 81 | echo "100644 $o0 0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 82 | echo "100644 $o0 0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 83 | echo "100644 $o0 0 d/e" |
| 84 | ) >expected && |
Junio C Hamano | 3af8286 | 2008-05-23 22:28:56 -0700 | [diff] [blame] | 85 | test_cmp expected actual |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 86 | ' |
| 87 | |
| 88 | test_expect_success 'setup 3' ' |
| 89 | |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 90 | rm -rf [abcd] && |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 91 | git checkout df-1 && |
| 92 | ( git ls-tree -r HEAD ; git ls-files -s ) >actual && |
| 93 | ( |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 94 | echo "100644 blob $o0 a" |
| 95 | echo "100644 blob $o0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 96 | echo "100644 blob $o0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 97 | echo "100644 blob $o0 d/e" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 98 | echo "100644 $o0 0 a" |
| 99 | echo "100644 $o0 0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 100 | echo "100644 $o0 0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 101 | echo "100644 $o0 0 d/e" |
| 102 | ) >expected && |
Junio C Hamano | 3af8286 | 2008-05-23 22:28:56 -0700 | [diff] [blame] | 103 | test_cmp expected actual && |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 104 | |
| 105 | rm -f b && mkdir b && echo df-1 >b/c && git add b/c && |
| 106 | o3=$(git hash-object b/c) && |
| 107 | |
| 108 | test_tick && |
| 109 | git commit -m "df-1 makes b/c" && |
| 110 | c3=$(git rev-parse --verify HEAD) && |
| 111 | ( git ls-tree -r HEAD ; git ls-files -s ) >actual && |
| 112 | ( |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 113 | echo "100644 blob $o0 a" |
| 114 | echo "100644 blob $o3 b/c" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 115 | echo "100644 blob $o0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 116 | echo "100644 blob $o0 d/e" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 117 | echo "100644 $o0 0 a" |
| 118 | echo "100644 $o3 0 b/c" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 119 | echo "100644 $o0 0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 120 | echo "100644 $o0 0 d/e" |
| 121 | ) >expected && |
Junio C Hamano | 3af8286 | 2008-05-23 22:28:56 -0700 | [diff] [blame] | 122 | test_cmp expected actual |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 123 | ' |
| 124 | |
| 125 | test_expect_success 'setup 4' ' |
| 126 | |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 127 | rm -rf [abcd] && |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 128 | git checkout df-2 && |
| 129 | ( git ls-tree -r HEAD ; git ls-files -s ) >actual && |
| 130 | ( |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 131 | echo "100644 blob $o0 a" |
| 132 | echo "100644 blob $o0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 133 | echo "100644 blob $o0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 134 | echo "100644 blob $o0 d/e" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 135 | echo "100644 $o0 0 a" |
| 136 | echo "100644 $o0 0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 137 | echo "100644 $o0 0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 138 | echo "100644 $o0 0 d/e" |
| 139 | ) >expected && |
Junio C Hamano | 3af8286 | 2008-05-23 22:28:56 -0700 | [diff] [blame] | 140 | test_cmp expected actual && |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 141 | |
| 142 | rm -f a && mkdir a && echo df-2 >a/c && git add a/c && |
| 143 | o4=$(git hash-object a/c) && |
| 144 | |
| 145 | test_tick && |
| 146 | git commit -m "df-2 makes a/c" && |
| 147 | c4=$(git rev-parse --verify HEAD) && |
| 148 | ( git ls-tree -r HEAD ; git ls-files -s ) >actual && |
| 149 | ( |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 150 | echo "100644 blob $o4 a/c" |
| 151 | echo "100644 blob $o0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 152 | echo "100644 blob $o0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 153 | echo "100644 blob $o0 d/e" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 154 | echo "100644 $o4 0 a/c" |
| 155 | echo "100644 $o0 0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 156 | echo "100644 $o0 0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 157 | echo "100644 $o0 0 d/e" |
| 158 | ) >expected && |
Junio C Hamano | 3af8286 | 2008-05-23 22:28:56 -0700 | [diff] [blame] | 159 | test_cmp expected actual |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 160 | ' |
| 161 | |
| 162 | test_expect_success 'setup 5' ' |
| 163 | |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 164 | rm -rf [abcd] && |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 165 | git checkout remove && |
| 166 | ( git ls-tree -r HEAD ; git ls-files -s ) >actual && |
| 167 | ( |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 168 | echo "100644 blob $o0 a" |
| 169 | echo "100644 blob $o0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 170 | echo "100644 blob $o0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 171 | echo "100644 blob $o0 d/e" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 172 | echo "100644 $o0 0 a" |
| 173 | echo "100644 $o0 0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 174 | echo "100644 $o0 0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 175 | echo "100644 $o0 0 d/e" |
| 176 | ) >expected && |
Junio C Hamano | 3af8286 | 2008-05-23 22:28:56 -0700 | [diff] [blame] | 177 | test_cmp expected actual && |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 178 | |
| 179 | rm -f b && |
| 180 | echo remove-conflict >a && |
| 181 | |
| 182 | git add a && |
| 183 | git rm b && |
| 184 | o5=$(git hash-object a) && |
| 185 | |
| 186 | test_tick && |
| 187 | git commit -m "remove removes b and modifies a" && |
| 188 | c5=$(git rev-parse --verify HEAD) && |
| 189 | ( git ls-tree -r HEAD ; git ls-files -s ) >actual && |
| 190 | ( |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 191 | echo "100644 blob $o5 a" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 192 | echo "100644 blob $o0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 193 | echo "100644 blob $o0 d/e" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 194 | echo "100644 $o5 0 a" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 195 | echo "100644 $o0 0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 196 | echo "100644 $o0 0 d/e" |
| 197 | ) >expected && |
Junio C Hamano | 3af8286 | 2008-05-23 22:28:56 -0700 | [diff] [blame] | 198 | test_cmp expected actual |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 199 | |
| 200 | ' |
| 201 | |
| 202 | test_expect_success 'setup 6' ' |
| 203 | |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 204 | rm -rf [abcd] && |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 205 | git checkout df-3 && |
| 206 | ( git ls-tree -r HEAD ; git ls-files -s ) >actual && |
| 207 | ( |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 208 | echo "100644 blob $o0 a" |
| 209 | echo "100644 blob $o0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 210 | echo "100644 blob $o0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 211 | echo "100644 blob $o0 d/e" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 212 | echo "100644 $o0 0 a" |
| 213 | echo "100644 $o0 0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 214 | echo "100644 $o0 0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 215 | echo "100644 $o0 0 d/e" |
| 216 | ) >expected && |
Junio C Hamano | 3af8286 | 2008-05-23 22:28:56 -0700 | [diff] [blame] | 217 | test_cmp expected actual && |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 218 | |
| 219 | rm -fr d && echo df-3 >d && git add d && |
| 220 | o6=$(git hash-object d) && |
| 221 | |
| 222 | test_tick && |
| 223 | git commit -m "df-3 makes d" && |
| 224 | c6=$(git rev-parse --verify HEAD) && |
| 225 | ( git ls-tree -r HEAD ; git ls-files -s ) >actual && |
| 226 | ( |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 227 | echo "100644 blob $o0 a" |
| 228 | echo "100644 blob $o0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 229 | echo "100644 blob $o0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 230 | echo "100644 blob $o6 d" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 231 | echo "100644 $o0 0 a" |
| 232 | echo "100644 $o0 0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 233 | echo "100644 $o0 0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 234 | echo "100644 $o6 0 d" |
| 235 | ) >expected && |
Junio C Hamano | 3af8286 | 2008-05-23 22:28:56 -0700 | [diff] [blame] | 236 | test_cmp expected actual |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 237 | ' |
| 238 | |
| 239 | test_expect_success 'merge-recursive simple' ' |
| 240 | |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 241 | rm -fr [abcd] && |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 242 | git checkout -f "$c2" && |
| 243 | |
Nanako Shiraishi | 0cb0e14 | 2008-09-03 17:59:27 +0900 | [diff] [blame] | 244 | git merge-recursive "$c0" -- "$c2" "$c1" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 245 | status=$? |
| 246 | case "$status" in |
| 247 | 1) |
| 248 | : happy |
| 249 | ;; |
| 250 | *) |
| 251 | echo >&2 "why status $status!!!" |
| 252 | false |
| 253 | ;; |
| 254 | esac |
| 255 | ' |
| 256 | |
| 257 | test_expect_success 'merge-recursive result' ' |
| 258 | |
| 259 | git ls-files -s >actual && |
| 260 | ( |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 261 | echo "100644 $o0 1 a" |
| 262 | echo "100644 $o2 2 a" |
| 263 | echo "100644 $o1 3 a" |
| 264 | echo "100644 $o0 0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 265 | echo "100644 $o0 0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 266 | echo "100644 $o1 0 d/e" |
| 267 | ) >expected && |
Junio C Hamano | 3af8286 | 2008-05-23 22:28:56 -0700 | [diff] [blame] | 268 | test_cmp expected actual |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 269 | |
| 270 | ' |
| 271 | |
Junio C Hamano | 446247d | 2008-08-23 12:56:57 -0700 | [diff] [blame] | 272 | test_expect_success 'fail if the index has unresolved entries' ' |
| 273 | |
| 274 | rm -fr [abcd] && |
| 275 | git checkout -f "$c1" && |
| 276 | |
| 277 | test_must_fail git merge "$c5" && |
| 278 | test_must_fail git merge "$c5" 2> out && |
Clemens Buchacher | c8c562a | 2009-06-01 11:20:56 +0200 | [diff] [blame] | 279 | grep "You have not concluded your merge" out && |
| 280 | rm -f .git/MERGE_HEAD && |
| 281 | test_must_fail git merge "$c5" 2> out && |
Junio C Hamano | 446247d | 2008-08-23 12:56:57 -0700 | [diff] [blame] | 282 | grep "You are in the middle of a conflicted merge" out |
| 283 | |
| 284 | ' |
| 285 | |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 286 | test_expect_success 'merge-recursive remove conflict' ' |
| 287 | |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 288 | rm -fr [abcd] && |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 289 | git checkout -f "$c1" && |
| 290 | |
Nanako Shiraishi | 0cb0e14 | 2008-09-03 17:59:27 +0900 | [diff] [blame] | 291 | git merge-recursive "$c0" -- "$c1" "$c5" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 292 | status=$? |
| 293 | case "$status" in |
| 294 | 1) |
| 295 | : happy |
| 296 | ;; |
| 297 | *) |
| 298 | echo >&2 "why status $status!!!" |
| 299 | false |
| 300 | ;; |
| 301 | esac |
| 302 | ' |
| 303 | |
| 304 | test_expect_success 'merge-recursive remove conflict' ' |
| 305 | |
| 306 | git ls-files -s >actual && |
| 307 | ( |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 308 | echo "100644 $o0 1 a" |
| 309 | echo "100644 $o1 2 a" |
| 310 | echo "100644 $o5 3 a" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 311 | echo "100644 $o0 0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 312 | echo "100644 $o1 0 d/e" |
| 313 | ) >expected && |
Junio C Hamano | 3af8286 | 2008-05-23 22:28:56 -0700 | [diff] [blame] | 314 | test_cmp expected actual |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 315 | |
| 316 | ' |
| 317 | |
| 318 | test_expect_success 'merge-recursive d/f simple' ' |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 319 | rm -fr [abcd] && |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 320 | git reset --hard && |
| 321 | git checkout -f "$c1" && |
| 322 | |
Nanako Shiraishi | 0cb0e14 | 2008-09-03 17:59:27 +0900 | [diff] [blame] | 323 | git merge-recursive "$c0" -- "$c1" "$c3" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 324 | ' |
| 325 | |
| 326 | test_expect_success 'merge-recursive result' ' |
| 327 | |
| 328 | git ls-files -s >actual && |
| 329 | ( |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 330 | echo "100644 $o1 0 a" |
| 331 | echo "100644 $o3 0 b/c" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 332 | echo "100644 $o0 0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 333 | echo "100644 $o1 0 d/e" |
| 334 | ) >expected && |
Junio C Hamano | 3af8286 | 2008-05-23 22:28:56 -0700 | [diff] [blame] | 335 | test_cmp expected actual |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 336 | |
| 337 | ' |
| 338 | |
| 339 | test_expect_success 'merge-recursive d/f conflict' ' |
| 340 | |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 341 | rm -fr [abcd] && |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 342 | git reset --hard && |
| 343 | git checkout -f "$c1" && |
| 344 | |
Nanako Shiraishi | 0cb0e14 | 2008-09-03 17:59:27 +0900 | [diff] [blame] | 345 | git merge-recursive "$c0" -- "$c1" "$c4" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 346 | status=$? |
| 347 | case "$status" in |
| 348 | 1) |
| 349 | : happy |
| 350 | ;; |
| 351 | *) |
| 352 | echo >&2 "why status $status!!!" |
| 353 | false |
| 354 | ;; |
| 355 | esac |
| 356 | ' |
| 357 | |
| 358 | test_expect_success 'merge-recursive d/f conflict result' ' |
| 359 | |
| 360 | git ls-files -s >actual && |
| 361 | ( |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 362 | echo "100644 $o0 1 a" |
| 363 | echo "100644 $o1 2 a" |
| 364 | echo "100644 $o4 0 a/c" |
| 365 | echo "100644 $o0 0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 366 | echo "100644 $o0 0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 367 | echo "100644 $o1 0 d/e" |
| 368 | ) >expected && |
Junio C Hamano | 3af8286 | 2008-05-23 22:28:56 -0700 | [diff] [blame] | 369 | test_cmp expected actual |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 370 | |
| 371 | ' |
| 372 | |
| 373 | test_expect_success 'merge-recursive d/f conflict the other way' ' |
| 374 | |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 375 | rm -fr [abcd] && |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 376 | git reset --hard && |
| 377 | git checkout -f "$c4" && |
| 378 | |
Nanako Shiraishi | 0cb0e14 | 2008-09-03 17:59:27 +0900 | [diff] [blame] | 379 | git merge-recursive "$c0" -- "$c4" "$c1" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 380 | status=$? |
| 381 | case "$status" in |
| 382 | 1) |
| 383 | : happy |
| 384 | ;; |
| 385 | *) |
| 386 | echo >&2 "why status $status!!!" |
| 387 | false |
| 388 | ;; |
| 389 | esac |
| 390 | ' |
| 391 | |
| 392 | test_expect_success 'merge-recursive d/f conflict result the other way' ' |
| 393 | |
| 394 | git ls-files -s >actual && |
| 395 | ( |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 396 | echo "100644 $o0 1 a" |
| 397 | echo "100644 $o1 3 a" |
| 398 | echo "100644 $o4 0 a/c" |
| 399 | echo "100644 $o0 0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 400 | echo "100644 $o0 0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 401 | echo "100644 $o1 0 d/e" |
| 402 | ) >expected && |
Junio C Hamano | 3af8286 | 2008-05-23 22:28:56 -0700 | [diff] [blame] | 403 | test_cmp expected actual |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 404 | |
| 405 | ' |
| 406 | |
| 407 | test_expect_success 'merge-recursive d/f conflict' ' |
| 408 | |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 409 | rm -fr [abcd] && |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 410 | git reset --hard && |
| 411 | git checkout -f "$c1" && |
| 412 | |
Nanako Shiraishi | 0cb0e14 | 2008-09-03 17:59:27 +0900 | [diff] [blame] | 413 | git merge-recursive "$c0" -- "$c1" "$c6" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 414 | status=$? |
| 415 | case "$status" in |
| 416 | 1) |
| 417 | : happy |
| 418 | ;; |
| 419 | *) |
| 420 | echo >&2 "why status $status!!!" |
| 421 | false |
| 422 | ;; |
| 423 | esac |
| 424 | ' |
| 425 | |
| 426 | test_expect_success 'merge-recursive d/f conflict result' ' |
| 427 | |
| 428 | git ls-files -s >actual && |
| 429 | ( |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 430 | echo "100644 $o1 0 a" |
| 431 | echo "100644 $o0 0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 432 | echo "100644 $o0 0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 433 | echo "100644 $o6 3 d" |
| 434 | echo "100644 $o0 1 d/e" |
| 435 | echo "100644 $o1 2 d/e" |
| 436 | ) >expected && |
Junio C Hamano | 3af8286 | 2008-05-23 22:28:56 -0700 | [diff] [blame] | 437 | test_cmp expected actual |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 438 | |
| 439 | ' |
| 440 | |
| 441 | test_expect_success 'merge-recursive d/f conflict' ' |
| 442 | |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 443 | rm -fr [abcd] && |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 444 | git reset --hard && |
| 445 | git checkout -f "$c6" && |
| 446 | |
Nanako Shiraishi | 0cb0e14 | 2008-09-03 17:59:27 +0900 | [diff] [blame] | 447 | git merge-recursive "$c0" -- "$c6" "$c1" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 448 | status=$? |
| 449 | case "$status" in |
| 450 | 1) |
| 451 | : happy |
| 452 | ;; |
| 453 | *) |
| 454 | echo >&2 "why status $status!!!" |
| 455 | false |
| 456 | ;; |
| 457 | esac |
| 458 | ' |
| 459 | |
| 460 | test_expect_success 'merge-recursive d/f conflict result' ' |
| 461 | |
| 462 | git ls-files -s >actual && |
| 463 | ( |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 464 | echo "100644 $o1 0 a" |
| 465 | echo "100644 $o0 0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 466 | echo "100644 $o0 0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 467 | echo "100644 $o6 2 d" |
| 468 | echo "100644 $o0 1 d/e" |
| 469 | echo "100644 $o1 3 d/e" |
| 470 | ) >expected && |
Junio C Hamano | 3af8286 | 2008-05-23 22:28:56 -0700 | [diff] [blame] | 471 | test_cmp expected actual |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 472 | |
| 473 | ' |
| 474 | |
| 475 | test_expect_success 'reset and 3-way merge' ' |
| 476 | |
| 477 | git reset --hard "$c2" && |
| 478 | git read-tree -m "$c0" "$c2" "$c1" |
| 479 | |
| 480 | ' |
| 481 | |
| 482 | test_expect_success 'reset and bind merge' ' |
| 483 | |
| 484 | git reset --hard master && |
| 485 | git read-tree --prefix=M/ master && |
| 486 | git ls-files -s >actual && |
| 487 | ( |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 488 | echo "100644 $o1 0 M/a" |
| 489 | echo "100644 $o0 0 M/b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 490 | echo "100644 $o0 0 M/c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 491 | echo "100644 $o1 0 M/d/e" |
| 492 | echo "100644 $o1 0 a" |
| 493 | echo "100644 $o0 0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 494 | echo "100644 $o0 0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 495 | echo "100644 $o1 0 d/e" |
| 496 | ) >expected && |
Junio C Hamano | 3af8286 | 2008-05-23 22:28:56 -0700 | [diff] [blame] | 497 | test_cmp expected actual && |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 498 | |
| 499 | git read-tree --prefix=a1/ master && |
| 500 | git ls-files -s >actual && |
| 501 | ( |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 502 | echo "100644 $o1 0 M/a" |
| 503 | echo "100644 $o0 0 M/b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 504 | echo "100644 $o0 0 M/c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 505 | echo "100644 $o1 0 M/d/e" |
| 506 | echo "100644 $o1 0 a" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 507 | echo "100644 $o1 0 a1/a" |
| 508 | echo "100644 $o0 0 a1/b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 509 | echo "100644 $o0 0 a1/c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 510 | echo "100644 $o1 0 a1/d/e" |
| 511 | echo "100644 $o0 0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 512 | echo "100644 $o0 0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 513 | echo "100644 $o1 0 d/e" |
| 514 | ) >expected && |
Junio C Hamano | 3af8286 | 2008-05-23 22:28:56 -0700 | [diff] [blame] | 515 | test_cmp expected actual |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 516 | |
| 517 | git read-tree --prefix=z/ master && |
| 518 | git ls-files -s >actual && |
| 519 | ( |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 520 | echo "100644 $o1 0 M/a" |
| 521 | echo "100644 $o0 0 M/b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 522 | echo "100644 $o0 0 M/c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 523 | echo "100644 $o1 0 M/d/e" |
| 524 | echo "100644 $o1 0 a" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 525 | echo "100644 $o1 0 a1/a" |
| 526 | echo "100644 $o0 0 a1/b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 527 | echo "100644 $o0 0 a1/c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 528 | echo "100644 $o1 0 a1/d/e" |
| 529 | echo "100644 $o0 0 b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 530 | echo "100644 $o0 0 c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 531 | echo "100644 $o1 0 d/e" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 532 | echo "100644 $o1 0 z/a" |
| 533 | echo "100644 $o0 0 z/b" |
Brian Gernhardt | 744747e | 2007-04-19 00:51:06 -0400 | [diff] [blame] | 534 | echo "100644 $o0 0 z/c" |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 535 | echo "100644 $o1 0 z/d/e" |
| 536 | ) >expected && |
Junio C Hamano | 3af8286 | 2008-05-23 22:28:56 -0700 | [diff] [blame] | 537 | test_cmp expected actual |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 538 | |
| 539 | ' |
| 540 | |
Alex Riesen | 41f13af | 2008-09-25 22:12:45 +0200 | [diff] [blame] | 541 | test_expect_success 'merge removes empty directories' ' |
| 542 | |
| 543 | git reset --hard master && |
| 544 | git checkout -b rm && |
| 545 | git rm d/e && |
| 546 | git commit -mremoved-d/e && |
| 547 | git checkout master && |
| 548 | git merge -s recursive rm && |
| 549 | test_must_fail test -d d |
| 550 | ' |
| 551 | |
Junio C Hamano | 885b981 | 2007-04-07 07:17:35 -0700 | [diff] [blame] | 552 | test_done |