blob: e97ae713d3e1b76e21c67d71bdd168b41a74f7b4 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
|
#
# Copyright (c) 2010 D. Richard Hipp
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the Simplified BSD License (also
# known as the "2-Clause License" or "FreeBSD License".)
#
# This program is distributed in the hope that it will be useful,
# but without any warranty; without even the implied warranty of
# merchantability or fitness for a particular purpose.
#
# Author contact information:
# drh@hwaci.com
# http://www.hwaci.com/drh/
#
############################################################################
#
# Tests of the "merge" command
#
if {! $::QUIET} {
puts "Skipping Merge5 tests"
}
protOut {
fossil sqlite3 --no-repository reacts badly to SQL dumped from
repositories created from fossil older than version 2.0.
}
#test merge5-sqlite3-issue false knownBug
test_cleanup_then_return
# Verify the results of a check-out
#
proc checkout-test {testid expected_content} {
set flist {}
foreach {status filename} [exec $::fossilexe ls -l] {
if {$status!="DELETED"} {lappend flist $filename}
}
eval fossil sha1sum [lsort $flist]
global RESULT
regsub -all {\n *} [string trim $expected_content] "\n " expected
regsub -all {\n *} [string trim $RESULT] "\n " result
if {$result!=$expected} {
protOut " Expected:\n $expected"
protOut " Got:\n $result"
test merge5-$testid 0
} else {
test merge5-$testid 1
}
}
require_no_open_checkout; test_setup ""
# Construct a test repository
#
exec $::fossilexe sqlite3 --no-repository m5.fossil <$testdir/${testfile}_repo.sql
fossil rebuild m5.fossil
fossil open m5.fossil
fossil user default drh --user drh
fossil update baseline
checkout-test 10 {
da5c8346496f3421cb58f84b6e59e9531d9d424d one.txt
ed24d19d726d173f18dbf4a9a0f8514daa3e3ca4 three.txt
278a402316510f6ae4a77186796a6bde78c7dbc1 two.txt
}
# Update to the tip of the trunk
#
fossil update trunk
checkout-test 20 {
6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
}
# Merge in the change that adds file four.txt
#
fossil merge br1
checkout-test 30 {
35815cf5804e8933eab64ae34e00bbb381be72c5 four.txt
6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
}
# Undo the merge. Verify restoration of former state.
#
fossil undo
checkout-test 40 {
6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
}
# Now switch to br1 then merge in the trunk. Verify that the result
# is the same as merging br1 into trunk.
#
fossil update br1
fossil merge trunk
checkout-test 50 {
35815cf5804e8933eab64ae34e00bbb381be72c5 four.txt
6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
}
fossil undo
fossil update trunk
checkout-test 60 {
6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
}
# Go back to the tip of the trunk and merge branch br1 again. This
# time do a check-in of the merge. Verify that the same content appears
# after the merge.
#
fossil update chng3
fossil merge br1
checkout-test 70 {
35815cf5804e8933eab64ae34e00bbb381be72c5 four.txt
6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
}
fossil commit -tag m1 -m {merge with br1} -nosign -f
checkout-test 71 {
35815cf5804e8933eab64ae34e00bbb381be72c5 four.txt
6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
}
fossil update chng3
checkout-test 72 {
6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
}
fossil update m1
checkout-test 73 {
35815cf5804e8933eab64ae34e00bbb381be72c5 four.txt
6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
}
# Merge br2 into the trunk. br2 contains some independent change to the
# two.txt file. Verify that these are merge in correctly.
#
fossil update m1
fossil merge br2
checkout-test 80 {
8f09bc55a60eb8ca06f10a3b577aafa869b31695 five.txt
35815cf5804e8933eab64ae34e00bbb381be72c5 four.txt
6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
68eeee8b843eaea76e33d3911f416b745d0e5e5c two.txt
}
fossil undo
checkout-test 81 {
35815cf5804e8933eab64ae34e00bbb381be72c5 four.txt
6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
}
# Now merge trunk into br2. Verify that the same set of changes result.
#
fossil update br2
fossil merge trunk
checkout-test 90 {
8f09bc55a60eb8ca06f10a3b577aafa869b31695 five.txt
35815cf5804e8933eab64ae34e00bbb381be72c5 four.txt
6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
68eeee8b843eaea76e33d3911f416b745d0e5e5c two.txt
}
fossil undo
checkout-test 91 {
8f09bc55a60eb8ca06f10a3b577aafa869b31695 five.txt
da5c8346496f3421cb58f84b6e59e9531d9d424d one.txt
ed24d19d726d173f18dbf4a9a0f8514daa3e3ca4 three.txt
85286cb3bc6d9e6f2f586eb5532f6065678f75b9 two.txt
}
# Starting from chng3, merge in br4. The one file is deleted from br4, so
# the merge should cause the one file to disappear from the checkout.
#
fossil update chng3
checkout-test 100 {
6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
}
fossil merge br4
checkout-test 101 {
6e167b139c294bed560e2e30b352361b101e1f39 four.txt
64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
}
fossil undo
checkout-test 102 {
6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
}
# Do the same merge of br4 into chng3, but this time check it in as a new
# branch.
#
fossil update chng3
fossil merge br4
fossil commit -nosign -branch br4-b -m {merge in br4} -tag m2
checkout-test 110 {
6e167b139c294bed560e2e30b352361b101e1f39 four.txt
64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
}
# Branches br1 and br4 both add file four.txt. So if we merge them together,
# the version of file four.txt in the original should be preserved.
#
fossil update br1
checkout-test 120 {
35815cf5804e8933eab64ae34e00bbb381be72c5 four.txt
da5c8346496f3421cb58f84b6e59e9531d9d424d one.txt
ed24d19d726d173f18dbf4a9a0f8514daa3e3ca4 three.txt
278a402316510f6ae4a77186796a6bde78c7dbc1 two.txt
}
fossil merge br4 -expectError
checkout-test 121 {
35815cf5804e8933eab64ae34e00bbb381be72c5 four.txt
ed24d19d726d173f18dbf4a9a0f8514daa3e3ca4 three.txt
278a402316510f6ae4a77186796a6bde78c7dbc1 two.txt
}
fossil undo
fossil update br4
checkout-test 122 {
6e167b139c294bed560e2e30b352361b101e1f39 four.txt
ed24d19d726d173f18dbf4a9a0f8514daa3e3ca4 three.txt
278a402316510f6ae4a77186796a6bde78c7dbc1 two.txt
}
fossil merge br1 -expectError
checkout-test 123 {
6e167b139c294bed560e2e30b352361b101e1f39 four.txt
ed24d19d726d173f18dbf4a9a0f8514daa3e3ca4 three.txt
278a402316510f6ae4a77186796a6bde78c7dbc1 two.txt
}
fossil undo
# Merge br5 (which includes a file rename) into chng3
#
fossil update chng3
checkout-test 130 {
6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
}
fossil merge br5
checkout-test 131 {
7eaf64a2c9141277b4c24259c7766d6a77047af7 one.txt
98e47f99bb9fed4fdcd407f553615ca7f15a38a2 three.txt
e58c5da3e6007d0e30600ea31611813093ad180f two-rename.txt
}
fossil undo
checkout-test 132 {
6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
}
fossil merge br5
checkout-test 133 {
7eaf64a2c9141277b4c24259c7766d6a77047af7 one.txt
98e47f99bb9fed4fdcd407f553615ca7f15a38a2 three.txt
e58c5da3e6007d0e30600ea31611813093ad180f two-rename.txt
}
fossil commit -nosign -m {merge with rename} -branch {trunk+br5}
checkout-test 134 {
7eaf64a2c9141277b4c24259c7766d6a77047af7 one.txt
98e47f99bb9fed4fdcd407f553615ca7f15a38a2 three.txt
e58c5da3e6007d0e30600ea31611813093ad180f two-rename.txt
}
fossil update chng3
checkout-test 135 {
6f525ab779ad66e24474d845c5fb7938be42d50d one.txt
64a8a5c7320fccfa4b2e5dfc5fd20a5381a86c5b three.txt
b262fee89ed8a27a23a5e09d3917e0bebe22cd24 two.txt
}
fossil update trunk+br5
checkout-test 136 {
7eaf64a2c9141277b4c24259c7766d6a77047af7 one.txt
98e47f99bb9fed4fdcd407f553615ca7f15a38a2 three.txt
e58c5da3e6007d0e30600ea31611813093ad180f two-rename.txt
}
# Merge the chng3 check-in into br5, verifying that the change to two.txt
# from chng3 are applies to two-rename.txt in br5.
#
fossil update br5
checkout-test 140 {
e866bb885d5184cba497cfb6a4eb281688519521 one.txt
e09593950837f76e70ca2f8ff2272ae3df0ba017 three.txt
5ebb3c9ad50740a7382902657b84a6105c32fc7b two-rename.txt
}
fossil merge chng3
checkout-test 141 {
7eaf64a2c9141277b4c24259c7766d6a77047af7 one.txt
98e47f99bb9fed4fdcd407f553615ca7f15a38a2 three.txt
e58c5da3e6007d0e30600ea31611813093ad180f two-rename.txt
}
fossil commit -nosign -m {change to two} -branch br5-2
checkout-test 142 {
7eaf64a2c9141277b4c24259c7766d6a77047af7 one.txt
98e47f99bb9fed4fdcd407f553615ca7f15a38a2 three.txt
e58c5da3e6007d0e30600ea31611813093ad180f two-rename.txt
}
###############################################################################
test_cleanup
|