comparison tests/test-convert-hg-sink.t @ 19892:77872b002e73

convert: update source shamap when using filemap, just as when not using filemap The reverse mapping was introduced in 2147a734dcf9 to make roundtrip conversions possible ... but it did not work when using filemap. Roundtrips with filemaps will of course only work flawlessly if inverse mappings are used. Especially, if a lossy convert mapping is used in one direction, then only linear lines of development can be converted in the other direction. With this constraint convert will do the right thing by assuming that excluded files haven't been changed.) A test case with general coverage of hg-hg roundtrips with filemap is added. (There a cases where adding records of converted revisions to the shamap in the source repository doesn't work - especially when converting the same repo to several other repos and back. It would arguably be better if convert only updated the shamaps in the target repo but read shamaps from both the source and and target repo ... but that is a different story. Making the stuff we have work consistently is step forward no matter what.)
author Mads Kiilerich <madski@unity3d.com>
date Thu, 03 Oct 2013 18:01:21 +0200
parents 81bf25ddd76a
children 45562379ce4e
comparison
equal deleted inserted replaced
19891:e271970b9821 19892:77872b002e73
120 $ cd new-filemap 120 $ cd new-filemap
121 $ hg tags 121 $ hg tags
122 tip 2:6f4fd1df87fb 122 tip 2:6f4fd1df87fb
123 some-tag 0:ba8636729451 123 some-tag 0:ba8636729451
124 $ cd .. 124 $ cd ..
125
126
127 Test cases for hg-hg roundtrip
128
129 Helper
130
131 $ glog()
132 > {
133 > hg log -G --template '{rev} {node|short} "{desc}" files: {files}\n' $*
134 > }
135
136 Create a tricky source repo
137
138 $ hg init source
139 $ cd source
140
141 $ echo 0 > 0
142 $ hg ci -Aqm '0: add 0'
143 $ echo a > a
144 $ mkdir dir
145 $ echo b > dir/b
146 $ hg ci -qAm '1: add a and dir/b'
147 $ echo c > dir/c
148 $ hg ci -qAm '2: add dir/c'
149 $ hg copy a e
150 $ echo b >> b
151 $ hg ci -qAm '3: copy a to e, change b'
152 $ hg up -qr -3
153 $ echo a >> a
154 $ hg ci -qAm '4: change a'
155 $ hg merge
156 merging a and e to e
157 2 files updated, 1 files merged, 0 files removed, 0 files unresolved
158 (branch merge, don't forget to commit)
159 $ hg copy b dir/d
160 $ hg ci -qAm '5: merge 2 and 3, copy b to dir/d'
161 $ echo a >> a
162 $ hg ci -qAm '6: change a'
163
164 $ hg mani
165 0
166 a
167 b
168 dir/b
169 dir/c
170 dir/d
171 e
172 $ glog
173 @ 6 0613c8e59a3d "6: change a" files: a
174 |
175 o 5 717e9b37cdb7 "5: merge 2 and 3, copy b to dir/d" files: dir/d e
176 |\
177 | o 4 86a55cb968d5 "4: change a" files: a
178 | |
179 o | 3 0e6e235919dd "3: copy a to e, change b" files: b e
180 | |
181 o | 2 0394b0d5e4f7 "2: add dir/c" files: dir/c
182 |/
183 o 1 333546584845 "1: add a and dir/b" files: a dir/b
184 |
185 o 0 d1a24e2ebd23 "0: add 0" files: 0
186
187 $ cd ..
188
189 Convert excluding rev 0 and dir/ (and thus rev2):
190
191 $ cat << EOF > filemap
192 > exclude dir
193 > EOF
194
195 $ hg convert --filemap filemap source dest --config convert.hg.revs=1::
196 initializing destination dest repository
197 scanning source...
198 sorting...
199 converting...
200 5 1: add a and dir/b
201 4 2: add dir/c
202 3 3: copy a to e, change b
203 2 4: change a
204 1 5: merge 2 and 3, copy b to dir/d
205 0 6: change a
206
207 Verify that conversion skipped rev 2:
208
209 $ glog -R dest
210 o 4 78814e84a217 "6: change a" files: a
211 |
212 o 3 f7cff662c5e5 "5: merge 2 and 3, copy b to dir/d" files: e
213 |\
214 | o 2 ab40a95b0072 "4: change a" files: a
215 | |
216 o | 1 bd51f17597bf "3: copy a to e, change b" files: b e
217 |/
218 o 0 a4a1dae0fe35 "1: add a and dir/b" files: 0 a
219
220
221 Verify mapping correct in both directions:
222
223 $ cat source/.hg/shamap
224 a4a1dae0fe3514cefd9b8541b7abbc8f44f946d5 333546584845f70c4cfecb992341aaef0e708166
225 bd51f17597bf32268e68a560b206898c3960cda2 0e6e235919dd8e9285ba8eb5adf703af9ad99378
226 ab40a95b00725307e79c2fd271000aa8af9759f4 86a55cb968d51770cba2a1630d6cc637b574580a
227 f7cff662c5e581e6f3f1a85ffdd2bcb35825f6ba 717e9b37cdb7eb9917ca8e30aa3f986e6d5b177d
228 78814e84a217894517c2de392b903ed05e6871a4 0613c8e59a3ddb9789072ef52f1ed13496489bb4
229 $ cat dest/.hg/shamap
230 333546584845f70c4cfecb992341aaef0e708166 a4a1dae0fe3514cefd9b8541b7abbc8f44f946d5
231 0394b0d5e4f761ced559fd0bbdc6afc16cb3f7d1 a4a1dae0fe3514cefd9b8541b7abbc8f44f946d5
232 0e6e235919dd8e9285ba8eb5adf703af9ad99378 bd51f17597bf32268e68a560b206898c3960cda2
233 86a55cb968d51770cba2a1630d6cc637b574580a ab40a95b00725307e79c2fd271000aa8af9759f4
234 717e9b37cdb7eb9917ca8e30aa3f986e6d5b177d f7cff662c5e581e6f3f1a85ffdd2bcb35825f6ba
235 0613c8e59a3ddb9789072ef52f1ed13496489bb4 78814e84a217894517c2de392b903ed05e6871a4
236
237 Verify meta data converted correctly:
238
239 $ hg -R dest log -r 1 --debug -p --git
240 changeset: 1:bd51f17597bf32268e68a560b206898c3960cda2
241 phase: draft
242 parent: 0:a4a1dae0fe3514cefd9b8541b7abbc8f44f946d5
243 parent: -1:0000000000000000000000000000000000000000
244 manifest: 1:040c72ed9b101773c24ac314776bfc846943781f
245 user: test
246 date: Thu Jan 01 00:00:00 1970 +0000
247 files+: b e
248 extra: branch=default
249 description:
250 3: copy a to e, change b
251
252
253 diff --git a/b b/b
254 new file mode 100644
255 --- /dev/null
256 +++ b/b
257 @@ -0,0 +1,1 @@
258 +b
259 diff --git a/a b/e
260 copy from a
261 copy to e
262
263 Verify files included and excluded correctly:
264
265 $ hg -R dest manifest -r tip
266 0
267 a
268 b
269 e
270
271
272 Make changes in dest and convert back:
273
274 $ hg -R dest up -q
275 $ echo dest > dest/dest
276 $ hg -R dest ci -Aqm 'change in dest'
277 $ hg -R dest tip
278 changeset: 5:a2e0e3cc6d1d
279 tag: tip
280 user: test
281 date: Thu Jan 01 00:00:00 1970 +0000
282 summary: change in dest
283
284
285 (converting merges back after using a filemap will probably cause chaos so we
286 exclude merges.)
287
288 $ hg convert dest source --config convert.hg.revs='!merge()'
289 scanning source...
290 sorting...
291 converting...
292 0 change in dest
293
294 Verify the conversion back:
295
296 $ hg -R source log --debug -r tip
297 changeset: 7:e6d364a69ff1248b2099e603b0c145504cade6f0
298 tag: tip
299 phase: draft
300 parent: 6:0613c8e59a3ddb9789072ef52f1ed13496489bb4
301 parent: -1:0000000000000000000000000000000000000000
302 manifest: 7:aa3e9542f3b76d4f1f1b2e9c7ce9dbb48b6a95ec
303 user: test
304 date: Thu Jan 01 00:00:00 1970 +0000
305 files+: dest
306 extra: branch=default
307 description:
308 change in dest
309
310
311 Files that had been excluded are still present:
312
313 $ hg -R source manifest -r tip
314 0
315 a
316 b
317 dest
318 dir/b
319 dir/c
320 dir/d
321 e
322
323 More source changes
324
325 $ cd source
326 $ echo 1 >> a
327 $ hg ci -m '8: source first branch'
328 created new head
329 $ hg up -qr -2
330 $ echo 2 >> a
331 $ hg ci -m '9: source second branch'
332 $ hg merge -q --tool internal:local
333 $ hg ci -m '10: source merge'
334 $ echo >> a
335 $ hg ci -m '11: source change'
336
337 $ hg mani
338 0
339 a
340 b
341 dest
342 dir/b
343 dir/c
344 dir/d
345 e
346
347 $ glog -r 6:
348 @ 11 0c8927d1f7f4 "11: source change" files: a
349 |
350 o 10 9ccb7ee8d261 "10: source merge" files: a
351 |\
352 | o 9 f131b1518dba "9: source second branch" files: a
353 | |
354 o | 8 669cf0e74b50 "8: source first branch" files: a
355 | |
356 | o 7 e6d364a69ff1 "change in dest" files: dest
357 |/
358 o 6 0613c8e59a3d "6: change a" files: a
359 |
360 $ cd ..
361
362 $ hg convert --filemap filemap source dest --config convert.hg.revs=3:
363 scanning source...
364 sorting...
365 converting...
366 3 8: source first branch
367 2 9: source second branch
368 1 10: source merge
369 0 11: source change
370
371 $ glog -R dest
372 o 9 8432d597b263 "11: source change" files: a
373 |
374 o 8 632ffacdcd6f "10: source merge" files: a
375 |\
376 | o 7 049cfee90ee6 "9: source second branch" files: a
377 | |
378 o | 6 9b6845e036e5 "8: source first branch" files: a
379 | |
380 | @ 5 a2e0e3cc6d1d "change in dest" files: dest
381 |/
382 o 4 78814e84a217 "6: change a" files: a
383 |
384 o 3 f7cff662c5e5 "5: merge 2 and 3, copy b to dir/d" files: e
385 |\
386 | o 2 ab40a95b0072 "4: change a" files: a
387 | |
388 o | 1 bd51f17597bf "3: copy a to e, change b" files: b e
389 |/
390 o 0 a4a1dae0fe35 "1: add a and dir/b" files: 0 a
391
392 $ cd ..