##// END OF EJS Templates
convert: keep branch switching merges with ancestors (issue3340)...
Patrick Mezard -
r17103:5146de7b default
parent child Browse files
Show More
@@ -294,23 +294,34 b' class filemap_source(converter_source):'
294 294 # A parent p is interesting if its mapped version (self.parentmap[p]):
295 295 # - is not SKIPREV
296 296 # - is still not in the list of parents (we don't want duplicates)
297 # - is not an ancestor of the mapped versions of the other parents
297 # - is not an ancestor of the mapped versions of the other parents or
298 # there is no parent in the same branch than the current revision.
298 299 mparents = []
299 wp = None
300 knownparents = set()
301 branch = self.commits[rev].branch
302 hasbranchparent = False
300 303 for i, p1 in enumerate(parents):
301 304 mp1 = self.parentmap[p1]
302 if mp1 == SKIPREV or mp1 in mparents:
305 if mp1 == SKIPREV or mp1 in knownparents:
303 306 continue
304 for p2 in parents:
305 if p1 == p2 or mp1 == self.parentmap[p2]:
306 continue
307 if mp1 in self.wantedancestors[p2]:
308 break
309 else:
310 mparents.append(mp1)
311 wp = i
312
313 if wp is None and parents:
307 isancestor = util.any(p2 for p2 in parents
308 if p1 != p2 and mp1 != self.parentmap[p2]
309 and mp1 in self.wantedancestors[p2])
310 if not isancestor and not hasbranchparent and len(parents) > 1:
311 # This could be expensive, avoid unnecessary calls.
312 if self._cachedcommit(p1).branch == branch:
313 hasbranchparent = True
314 mparents.append((p1, mp1, i, isancestor))
315 knownparents.add(mp1)
316 # Discard parents ancestors of other parents if there is a
317 # non-ancestor one on the same branch than current revision.
318 if hasbranchparent:
319 mparents = [p for p in mparents if not p[3]]
320 wp = None
321 if mparents:
322 wp = max(p[2] for p in mparents)
323 mparents = [p[1] for p in mparents]
324 elif parents:
314 325 wp = 0
315 326
316 327 self.origparents[rev] = parents
@@ -319,7 +330,6 b' class filemap_source(converter_source):'
319 330 if 'close' in self.commits[rev].extra:
320 331 # A branch closing revision is only useful if one of its
321 332 # parents belong to the branch being closed
322 branch = self.commits[rev].branch
323 333 pbranches = [self._cachedcommit(p).branch for p in mparents]
324 334 if branch in pbranches:
325 335 closed = True
@@ -375,3 +375,189 b' exercise incremental conversion at the s'
375 375 |
376 376 o 0 "addb" files: b
377 377
378
379 test merge parents/empty merges pruning
380
381 $ glog()
382 > {
383 > hg glog --template '{rev}:{node|short}@{branch} "{desc}" files: {files}\n' "$@"
384 > }
385
386 test anonymous branch pruning
387
388 $ hg init anonymousbranch
389 $ cd anonymousbranch
390 $ echo a > a
391 $ echo b > b
392 $ hg ci -Am add
393 adding a
394 adding b
395 $ echo a >> a
396 $ hg ci -m changea
397 $ hg up 0
398 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
399 $ echo b >> b
400 $ hg ci -m changeb
401 created new head
402 $ hg up 1
403 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
404 $ hg merge
405 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
406 (branch merge, don't forget to commit)
407 $ hg ci -m merge
408 $ cd ..
409
410 $ cat > filemap <<EOF
411 > include a
412 > EOF
413 $ hg convert --filemap filemap anonymousbranch anonymousbranch-hg
414 initializing destination anonymousbranch-hg repository
415 scanning source...
416 sorting...
417 converting...
418 3 add
419 2 changea
420 1 changeb
421 0 merge
422 $ glog -R anonymousbranch
423 @ 3:c71d5201a498@default "merge" files:
424 |\
425 | o 2:607eb44b17f9@default "changeb" files: b
426 | |
427 o | 1:1f60ea617824@default "changea" files: a
428 |/
429 o 0:0146e6129113@default "add" files: a b
430
431 $ glog -R anonymousbranch-hg
432 o 1:cda818e7219b@default "changea" files: a
433 |
434 o 0:c334dc3be0da@default "add" files: a
435
436 $ cat anonymousbranch-hg/.hg/shamap
437 0146e6129113dba9ac90207cfdf2d7ed35257ae5 c334dc3be0daa2a4e9ce4d2e2bdcba40c09d4916
438 1f60ea61782421edf8d051ff4fcb61b330f26a4a cda818e7219b5f7f3fb9f49780054ed6a1905ec3
439 607eb44b17f9348cd5cbd26e16af87ba77b0b037 c334dc3be0daa2a4e9ce4d2e2bdcba40c09d4916
440 c71d5201a498b2658d105a6bf69d7a0df2649aea cda818e7219b5f7f3fb9f49780054ed6a1905ec3
441
442 $ cat > filemap <<EOF
443 > include b
444 > EOF
445 $ hg convert --filemap filemap anonymousbranch anonymousbranch-hg2
446 initializing destination anonymousbranch-hg2 repository
447 scanning source...
448 sorting...
449 converting...
450 3 add
451 2 changea
452 1 changeb
453 0 merge
454 $ glog -R anonymousbranch
455 @ 3:c71d5201a498@default "merge" files:
456 |\
457 | o 2:607eb44b17f9@default "changeb" files: b
458 | |
459 o | 1:1f60ea617824@default "changea" files: a
460 |/
461 o 0:0146e6129113@default "add" files: a b
462
463 $ glog -R anonymousbranch-hg2
464 o 1:62dd350b0df6@default "changeb" files: b
465 |
466 o 0:4b9ced861657@default "add" files: b
467
468 $ cat anonymousbranch-hg2/.hg/shamap
469 0146e6129113dba9ac90207cfdf2d7ed35257ae5 4b9ced86165703791653059a1db6ed864630a523
470 1f60ea61782421edf8d051ff4fcb61b330f26a4a 4b9ced86165703791653059a1db6ed864630a523
471 607eb44b17f9348cd5cbd26e16af87ba77b0b037 62dd350b0df695f7d2c82a02e0499b16fd790f22
472 c71d5201a498b2658d105a6bf69d7a0df2649aea 62dd350b0df695f7d2c82a02e0499b16fd790f22
473
474 test named branch pruning
475
476 $ hg init namedbranch
477 $ cd namedbranch
478 $ echo a > a
479 $ echo b > b
480 $ hg ci -Am add
481 adding a
482 adding b
483 $ echo a >> a
484 $ hg ci -m changea
485 $ hg up 0
486 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
487 $ hg branch foo
488 marked working directory as branch foo
489 (branches are permanent and global, did you want a bookmark?)
490 $ echo b >> b
491 $ hg ci -m changeb
492 $ hg up default
493 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
494 $ hg merge foo
495 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
496 (branch merge, don't forget to commit)
497 $ hg ci -m merge
498 $ cd ..
499
500 $ cat > filemap <<EOF
501 > include a
502 > EOF
503 $ hg convert --filemap filemap namedbranch namedbranch-hg
504 initializing destination namedbranch-hg repository
505 scanning source...
506 sorting...
507 converting...
508 3 add
509 2 changea
510 1 changeb
511 0 merge
512 $ glog -R namedbranch
513 @ 3:73899bcbe45c@default "merge" files:
514 |\
515 | o 2:8097982d19fc@foo "changeb" files: b
516 | |
517 o | 1:1f60ea617824@default "changea" files: a
518 |/
519 o 0:0146e6129113@default "add" files: a b
520
521 $ glog -R namedbranch-hg
522 o 1:cda818e7219b@default "changea" files: a
523 |
524 o 0:c334dc3be0da@default "add" files: a
525
526
527 $ cd namedbranch
528 $ hg --config extensions.mq= strip tip
529 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
530 saved backup bundle to $TESTTMP/namedbranch/.hg/strip-backup/73899bcbe45c-backup.hg
531 $ hg up foo
532 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
533 $ hg merge default
534 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
535 (branch merge, don't forget to commit)
536 $ hg ci -m merge
537 $ cd ..
538
539 $ hg convert --filemap filemap namedbranch namedbranch-hg2
540 initializing destination namedbranch-hg2 repository
541 scanning source...
542 sorting...
543 converting...
544 3 add
545 2 changea
546 1 changeb
547 0 merge
548 $ glog -R namedbranch
549 @ 3:e1959de76e1b@foo "merge" files:
550 |\
551 | o 2:8097982d19fc@foo "changeb" files: b
552 | |
553 o | 1:1f60ea617824@default "changea" files: a
554 |/
555 o 0:0146e6129113@default "add" files: a b
556
557 $ glog -R namedbranch-hg2
558 o 2:dcf314454667@foo "merge" files:
559 |\
560 | o 1:cda818e7219b@default "changea" files: a
561 |/
562 o 0:c334dc3be0da@default "add" files: a
563
General Comments 0
You need to be logged in to leave comments. Login now