##// END OF EJS Templates
copies: detect case when a merge decision overwrite previous data...
marmoute -
r47310:c19c6620 default
parent child Browse files
Show More
@@ -434,7 +434,11 b' def _combine_changeset_copies('
434 # potential filelog related behavior.
434 # potential filelog related behavior.
435 assert parent == 2
435 assert parent == 2
436 current_copies = _merge_copies_dict(
436 current_copies = _merge_copies_dict(
437 newcopies, current_copies, isancestor, changes
437 newcopies,
438 current_copies,
439 isancestor,
440 changes,
441 current_rev,
438 )
442 )
439 all_copies[current_rev] = current_copies
443 all_copies[current_rev] = current_copies
440
444
@@ -456,7 +460,7 b' PICK_MAJOR = 1'
456 PICK_EITHER = 2
460 PICK_EITHER = 2
457
461
458
462
459 def _merge_copies_dict(minor, major, isancestor, changes):
463 def _merge_copies_dict(minor, major, isancestor, changes, current_merge):
460 """merge two copies-mapping together, minor and major
464 """merge two copies-mapping together, minor and major
461
465
462 In case of conflict, value from "major" will be picked.
466 In case of conflict, value from "major" will be picked.
@@ -474,8 +478,15 b' def _merge_copies_dict(minor, major, isa'
474 if other is None:
478 if other is None:
475 minor[dest] = value
479 minor[dest] = value
476 else:
480 else:
477 pick = _compare_values(changes, isancestor, dest, other, value)
481 pick, overwrite = _compare_values(
478 if pick == PICK_MAJOR:
482 changes, isancestor, dest, other, value
483 )
484 if overwrite:
485 if pick == PICK_MAJOR:
486 minor[dest] = (current_merge, value[1])
487 else:
488 minor[dest] = (current_merge, other[1])
489 elif pick == PICK_MAJOR:
479 minor[dest] = value
490 minor[dest] = value
480 return minor
491 return minor
481
492
@@ -483,9 +494,10 b' def _merge_copies_dict(minor, major, isa'
483 def _compare_values(changes, isancestor, dest, minor, major):
494 def _compare_values(changes, isancestor, dest, minor, major):
484 """compare two value within a _merge_copies_dict loop iteration
495 """compare two value within a _merge_copies_dict loop iteration
485
496
486 return pick
497 return (pick, overwrite).
487
498
488 - pick is one of PICK_MINOR, PICK_MAJOR or PICK_EITHER
499 - pick is one of PICK_MINOR, PICK_MAJOR or PICK_EITHER
500 - overwrite is True if pick is a return of an ambiguity that needs resolution.
489 """
501 """
490 major_tt, major_value = major
502 major_tt, major_value = major
491 minor_tt, minor_value = minor
503 minor_tt, minor_value = minor
@@ -493,7 +505,7 b' def _compare_values(changes, isancestor,'
493 if major_tt == minor_tt:
505 if major_tt == minor_tt:
494 # if it comes from the same revision it must be the same value
506 # if it comes from the same revision it must be the same value
495 assert major_value == minor_value
507 assert major_value == minor_value
496 return PICK_EITHER
508 return PICK_EITHER, False
497 elif (
509 elif (
498 changes is not None
510 changes is not None
499 and minor_value is not None
511 and minor_value is not None
@@ -502,7 +514,7 b' def _compare_values(changes, isancestor,'
502 ):
514 ):
503 # In this case, a deletion was reverted, the "alive" value overwrite
515 # In this case, a deletion was reverted, the "alive" value overwrite
504 # the deleted one.
516 # the deleted one.
505 return PICK_MINOR
517 return PICK_MINOR, True
506 elif (
518 elif (
507 changes is not None
519 changes is not None
508 and major_value is not None
520 and major_value is not None
@@ -511,30 +523,30 b' def _compare_values(changes, isancestor,'
511 ):
523 ):
512 # In this case, a deletion was reverted, the "alive" value overwrite
524 # In this case, a deletion was reverted, the "alive" value overwrite
513 # the deleted one.
525 # the deleted one.
514 return PICK_MAJOR
526 return PICK_MAJOR, True
515 elif isancestor(minor_tt, major_tt):
527 elif isancestor(minor_tt, major_tt):
516 if changes is not None and dest in changes.merged:
528 if changes is not None and dest in changes.merged:
517 # change to dest happened on the branch without copy-source change,
529 # change to dest happened on the branch without copy-source change,
518 # so both source are valid and "major" wins.
530 # so both source are valid and "major" wins.
519 return PICK_MAJOR
531 return PICK_MAJOR, True
520 else:
532 else:
521 return PICK_MAJOR
533 return PICK_MAJOR, False
522 elif isancestor(major_tt, minor_tt):
534 elif isancestor(major_tt, minor_tt):
523 if changes is not None and dest in changes.merged:
535 if changes is not None and dest in changes.merged:
524 # change to dest happened on the branch without copy-source change,
536 # change to dest happened on the branch without copy-source change,
525 # so both source are valid and "major" wins.
537 # so both source are valid and "major" wins.
526 return PICK_MAJOR
538 return PICK_MAJOR, True
527 else:
539 else:
528 return PICK_MINOR
540 return PICK_MINOR, False
529 elif minor_value is None:
541 elif minor_value is None:
530 # in case of conflict, the "alive" side wins.
542 # in case of conflict, the "alive" side wins.
531 return PICK_MAJOR
543 return PICK_MAJOR, True
532 elif major_value is None:
544 elif major_value is None:
533 # in case of conflict, the "alive" side wins.
545 # in case of conflict, the "alive" side wins.
534 return PICK_MINOR
546 return PICK_MINOR, True
535 else:
547 else:
536 # in case of conflict where both side are alive, major wins.
548 # in case of conflict where both side are alive, major wins.
537 return PICK_MAJOR
549 return PICK_MAJOR, True
538
550
539
551
540 def _revinfo_getter_extra(repo):
552 def _revinfo_getter_extra(repo):
@@ -568,20 +568,20 b' fn merge_copies_dict<A: Fn(Revision, Rev'
568 // This closure exist as temporary help while multiple developper are
568 // This closure exist as temporary help while multiple developper are
569 // actively working on this code. Feel free to re-inline it once this
569 // actively working on this code. Feel free to re-inline it once this
570 // code is more settled.
570 // code is more settled.
571 let mut cmp_value =
571 let cmp_value = |oracle: &mut AncestorOracle<A>,
572 |dest: &PathToken,
572 dest: &PathToken,
573 src_minor: &TimeStampedPathCopy,
573 src_minor: &TimeStampedPathCopy,
574 src_major: &TimeStampedPathCopy| {
574 src_major: &TimeStampedPathCopy| {
575 compare_value(
575 compare_value(
576 path_map,
576 path_map,
577 current_merge,
577 current_merge,
578 changes,
578 changes,
579 oracle,
579 oracle,
580 dest,
580 dest,
581 src_minor,
581 src_minor,
582 src_major,
582 src_major,
583 )
583 )
584 };
584 };
585 if minor.is_empty() {
585 if minor.is_empty() {
586 major
586 major
587 } else if major.is_empty() {
587 } else if major.is_empty() {
@@ -605,11 +605,30 b' fn merge_copies_dict<A: Fn(Revision, Rev'
605 for (dest, src_minor) in minor {
605 for (dest, src_minor) in minor {
606 let src_major = major.get(&dest);
606 let src_major = major.get(&dest);
607 match src_major {
607 match src_major {
608 None => major.insert(dest, src_minor),
608 None => {
609 major.insert(dest, src_minor);
610 }
609 Some(src_major) => {
611 Some(src_major) => {
610 match cmp_value(&dest, &src_minor, src_major) {
612 let (pick, overwrite) =
611 MergePick::Any | MergePick::Major => None,
613 cmp_value(oracle, &dest, &src_minor, src_major);
612 MergePick::Minor => major.insert(dest, src_minor),
614 if overwrite {
615 oracle.record_overwrite(src_minor.rev, current_merge);
616 oracle.record_overwrite(src_major.rev, current_merge);
617 let path = match pick {
618 MergePick::Major => src_major.path,
619 MergePick::Minor => src_minor.path,
620 MergePick::Any => src_major.path,
621 };
622 let src = TimeStampedPathCopy {
623 rev: current_merge,
624 path,
625 };
626 major.insert(dest, src);
627 } else {
628 match pick {
629 MergePick::Any | MergePick::Major => None,
630 MergePick::Minor => major.insert(dest, src_minor),
631 };
613 }
632 }
614 }
633 }
615 };
634 };
@@ -621,11 +640,30 b' fn merge_copies_dict<A: Fn(Revision, Rev'
621 for (dest, src_major) in major {
640 for (dest, src_major) in major {
622 let src_minor = minor.get(&dest);
641 let src_minor = minor.get(&dest);
623 match src_minor {
642 match src_minor {
624 None => minor.insert(dest, src_major),
643 None => {
644 minor.insert(dest, src_major);
645 }
625 Some(src_minor) => {
646 Some(src_minor) => {
626 match cmp_value(&dest, src_minor, &src_major) {
647 let (pick, overwrite) =
627 MergePick::Any | MergePick::Minor => None,
648 cmp_value(oracle, &dest, &src_major, src_minor);
628 MergePick::Major => minor.insert(dest, src_major),
649 if overwrite {
650 oracle.record_overwrite(src_minor.rev, current_merge);
651 oracle.record_overwrite(src_major.rev, current_merge);
652 let path = match pick {
653 MergePick::Major => src_minor.path,
654 MergePick::Minor => src_major.path,
655 MergePick::Any => src_major.path,
656 };
657 let src = TimeStampedPathCopy {
658 rev: current_merge,
659 path,
660 };
661 minor.insert(dest, src);
662 } else {
663 match pick {
664 MergePick::Any | MergePick::Major => None,
665 MergePick::Minor => minor.insert(dest, src_major),
666 };
629 }
667 }
630 }
668 }
631 };
669 };
@@ -663,12 +701,32 b' fn merge_copies_dict<A: Fn(Revision, Rev'
663 DiffItem::Update { old, new } => {
701 DiffItem::Update { old, new } => {
664 let (dest, src_major) = new;
702 let (dest, src_major) = new;
665 let (_, src_minor) = old;
703 let (_, src_minor) = old;
666 match cmp_value(dest, src_minor, src_major) {
704 let (pick, overwrite) =
667 MergePick::Major => to_minor(dest, src_major),
705 cmp_value(oracle, dest, src_minor, src_major);
668 MergePick::Minor => to_major(dest, src_minor),
706 if overwrite {
669 // If the two entry are identical, no need to do
707 oracle.record_overwrite(src_minor.rev, current_merge);
670 // anything (but diff should not have yield them)
708 oracle.record_overwrite(src_major.rev, current_merge);
671 MergePick::Any => unreachable!(),
709 let path = match pick {
710 MergePick::Major => src_major.path,
711 MergePick::Minor => src_minor.path,
712 // If the two entry are identical, no need to do
713 // anything (but diff should not have yield them)
714 MergePick::Any => src_major.path,
715 };
716 let src = TimeStampedPathCopy {
717 rev: current_merge,
718 path,
719 };
720 to_minor(dest, &src);
721 to_major(dest, &src);
722 } else {
723 match pick {
724 MergePick::Major => to_minor(dest, src_major),
725 MergePick::Minor => to_major(dest, src_minor),
726 // If the two entry are identical, no need to do
727 // anything (but diff should not have yield them)
728 MergePick::Any => unreachable!(),
729 }
672 }
730 }
673 }
731 }
674 };
732 };
@@ -717,39 +775,37 b' fn compare_value<A: Fn(Revision, Revisio'
717 dest: &PathToken,
775 dest: &PathToken,
718 src_minor: &TimeStampedPathCopy,
776 src_minor: &TimeStampedPathCopy,
719 src_major: &TimeStampedPathCopy,
777 src_major: &TimeStampedPathCopy,
720 ) -> MergePick {
778 ) -> (MergePick, bool) {
721 if src_major.rev == current_merge {
779 if src_major.rev == current_merge {
722 if src_minor.rev == current_merge {
780 if src_minor.rev == current_merge {
723 if src_major.path.is_none() {
781 if src_major.path.is_none() {
724 // We cannot get different copy information for both p1 and p2
782 // We cannot get different copy information for both p1 and p2
725 // from the same revision. Unless this was a
783 // from the same revision. Unless this was a
726 // deletion
784 // deletion
727 MergePick::Any
785 (MergePick::Any, false)
728 } else {
786 } else {
729 unreachable!();
787 unreachable!();
730 }
788 }
731 } else {
789 } else {
732 // The last value comes the current merge, this value -will- win
790 // The last value comes the current merge, this value -will- win
733 // eventually.
791 // eventually.
734 oracle.record_overwrite(src_minor.rev, src_major.rev);
792 (MergePick::Major, true)
735 MergePick::Major
736 }
793 }
737 } else if src_minor.rev == current_merge {
794 } else if src_minor.rev == current_merge {
738 // The last value comes the current merge, this value -will- win
795 // The last value comes the current merge, this value -will- win
739 // eventually.
796 // eventually.
740 oracle.record_overwrite(src_major.rev, src_minor.rev);
797 (MergePick::Minor, true)
741 MergePick::Minor
742 } else if src_major.path == src_minor.path {
798 } else if src_major.path == src_minor.path {
743 // we have the same value, but from other source;
799 // we have the same value, but from other source;
744 if src_major.rev == src_minor.rev {
800 if src_major.rev == src_minor.rev {
745 // If the two entry are identical, they are both valid
801 // If the two entry are identical, they are both valid
746 MergePick::Any
802 (MergePick::Any, false)
747 } else if oracle.is_overwrite(src_major.rev, src_minor.rev) {
803 } else if oracle.is_overwrite(src_major.rev, src_minor.rev) {
748 MergePick::Minor
804 (MergePick::Minor, false)
749 } else if oracle.is_overwrite(src_minor.rev, src_major.rev) {
805 } else if oracle.is_overwrite(src_minor.rev, src_major.rev) {
750 MergePick::Major
806 (MergePick::Major, false)
751 } else {
807 } else {
752 MergePick::Major
808 (MergePick::Any, true)
753 }
809 }
754 } else if src_major.rev == src_minor.rev {
810 } else if src_major.rev == src_minor.rev {
755 // We cannot get copy information for both p1 and p2 in the
811 // We cannot get copy information for both p1 and p2 in the
@@ -766,7 +822,7 b' fn compare_value<A: Fn(Revision, Revisio'
766 {
822 {
767 // If the file is "deleted" in the major side but was
823 // If the file is "deleted" in the major side but was
768 // salvaged by the merge, we keep the minor side alive
824 // salvaged by the merge, we keep the minor side alive
769 MergePick::Minor
825 (MergePick::Minor, true)
770 } else if src_major.path.is_some()
826 } else if src_major.path.is_some()
771 && src_minor.path.is_none()
827 && src_minor.path.is_none()
772 && action == MergeCase::Salvaged
828 && action == MergeCase::Salvaged
@@ -774,7 +830,7 b' fn compare_value<A: Fn(Revision, Revisio'
774 // If the file is "deleted" in the minor side but was
830 // If the file is "deleted" in the minor side but was
775 // salvaged by the merge, unconditionnaly preserve the
831 // salvaged by the merge, unconditionnaly preserve the
776 // major side.
832 // major side.
777 MergePick::Major
833 (MergePick::Major, true)
778 } else if oracle.is_overwrite(src_minor.rev, src_major.rev) {
834 } else if oracle.is_overwrite(src_minor.rev, src_major.rev) {
779 // The information from the minor version are strictly older than
835 // The information from the minor version are strictly older than
780 // the major version
836 // the major version
@@ -784,10 +840,10 b' fn compare_value<A: Fn(Revision, Revisio'
784 // mean the older copy information are still relevant.
840 // mean the older copy information are still relevant.
785 //
841 //
786 // The major side wins such conflict.
842 // The major side wins such conflict.
787 MergePick::Major
843 (MergePick::Major, true)
788 } else {
844 } else {
789 // No activity on the minor branch, pick the newer one.
845 // No activity on the minor branch, pick the newer one.
790 MergePick::Major
846 (MergePick::Major, false)
791 }
847 }
792 } else if oracle.is_overwrite(src_major.rev, src_minor.rev) {
848 } else if oracle.is_overwrite(src_major.rev, src_minor.rev) {
793 if action == MergeCase::Merged {
849 if action == MergeCase::Merged {
@@ -796,20 +852,20 b' fn compare_value<A: Fn(Revision, Revisio'
796 // mean the older copy information are still relevant.
852 // mean the older copy information are still relevant.
797 //
853 //
798 // The major side wins such conflict.
854 // The major side wins such conflict.
799 MergePick::Major
855 (MergePick::Major, true)
800 } else {
856 } else {
801 // No activity on the minor branch, pick the newer one.
857 // No activity on the minor branch, pick the newer one.
802 MergePick::Minor
858 (MergePick::Minor, false)
803 }
859 }
804 } else if src_minor.path.is_none() {
860 } else if src_minor.path.is_none() {
805 // the minor side has no relevant information, pick the alive one
861 // the minor side has no relevant information, pick the alive one
806 MergePick::Major
862 (MergePick::Major, true)
807 } else if src_major.path.is_none() {
863 } else if src_major.path.is_none() {
808 // the major side has no relevant information, pick the alive one
864 // the major side has no relevant information, pick the alive one
809 MergePick::Minor
865 (MergePick::Minor, true)
810 } else {
866 } else {
811 // by default the major side wins
867 // by default the major side wins
812 MergePick::Major
868 (MergePick::Major, true)
813 }
869 }
814 }
870 }
815 }
871 }
@@ -3182,10 +3182,8 b' The result from mAEm is the same for the'
3182 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mK,AEm")' f
3182 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mK,AEm")' f
3183 A f
3183 A f
3184 a (filelog !)
3184 a (filelog !)
3185 a (missing-correct-output sidedata !)
3185 a (sidedata !)
3186 a (missing-correct-output upgraded !)
3186 a (upgraded !)
3187 b (known-bad-output sidedata !)
3188 b (known-bad-output upgraded !)
3189
3187
3190
3188
3191 The result from mEAm is the same for the subsequent merge:
3189 The result from mEAm is the same for the subsequent merge:
@@ -3205,10 +3203,8 b' The result from mEAm is the same for the'
3205 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mJ,EAm")' f
3203 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mJ,EAm")' f
3206 A f
3204 A f
3207 a (filelog !)
3205 a (filelog !)
3208 b (missing-correct-output sidedata !)
3206 b (sidedata !)
3209 b (missing-correct-output upgraded !)
3207 b (upgraded !)
3210 a (known-bad-output sidedata !)
3211 a (known-bad-output upgraded !)
3212
3208
3213 Subcase: chaining conflicting rename resolution
3209 Subcase: chaining conflicting rename resolution
3214 ```````````````````````````````````````````````
3210 ```````````````````````````````````````````````
@@ -3235,10 +3231,8 b' The result from mPQm is the same for the'
3235 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mT,PQm")' v
3231 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mT,PQm")' v
3236 A v
3232 A v
3237 r (filelog !)
3233 r (filelog !)
3238 p (missing-correct-output sidedata !)
3234 p (sidedata !)
3239 p (missing-correct-output upgraded !)
3235 p (upgraded !)
3240 r (known-bad-output sidedata !)
3241 r (known-bad-output upgraded !)
3242
3236
3243
3237
3244 The result from mQPm is the same for the subsequent merge:
3238 The result from mQPm is the same for the subsequent merge:
@@ -3254,10 +3248,8 b' The result from mQPm is the same for the'
3254 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mS,QPm")' v
3248 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mS,QPm")' v
3255 A v
3249 A v
3256 r (filelog !)
3250 r (filelog !)
3257 r (missing-correct-output sidedata !)
3251 r (sidedata !)
3258 r (missing-correct-output upgraded !)
3252 r (upgraded !)
3259 p (known-bad-output sidedata !)
3260 p (known-bad-output upgraded !)
3261
3253
3262
3254
3263 Subcase: chaining salvage information during a merge
3255 Subcase: chaining salvage information during a merge
@@ -3271,9 +3263,7 b' reference output:'
3271 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCB-revert-m-0")'
3263 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCB-revert-m-0")'
3272 M b
3264 M b
3273 A d
3265 A d
3274 a (filelog !)
3266 a (no-changeset no-compatibility !)
3275 a (sidedata !)
3276 a (upgraded !)
3277 A t
3267 A t
3278 p
3268 p
3279 R a
3269 R a
@@ -3281,22 +3271,17 b' reference output:'
3281 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBC-revert-m-0")'
3271 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBC-revert-m-0")'
3282 M b
3272 M b
3283 A d
3273 A d
3284 a (filelog !)
3274 a (no-changeset no-compatibility !)
3285 a (sidedata !)
3286 a (upgraded !)
3287 A t
3275 A t
3288 p
3276 p
3289 R a
3277 R a
3290 R p
3278 R p
3291
3279
3292 chained output
3280 chained output
3293
3294 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBC+revert,Lm")'
3281 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBC+revert,Lm")'
3295 M b
3282 M b
3296 A d
3283 A d
3297 a (filelog !)
3284 a (no-changeset no-compatibility !)
3298 a (missing-correct-output sidedata !)
3299 a (missing-correct-output upgraded !)
3300 A t
3285 A t
3301 p
3286 p
3302 A unrelated-l
3287 A unrelated-l
@@ -3305,9 +3290,7 b' chained output'
3305 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCB+revert,Lm")'
3290 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCB+revert,Lm")'
3306 M b
3291 M b
3307 A d
3292 A d
3308 a (filelog !)
3293 a (no-changeset no-compatibility !)
3309 a (missing-correct-output sidedata !)
3310 a (missing-correct-output upgraded !)
3311 A t
3294 A t
3312 p
3295 p
3313 A unrelated-l
3296 A unrelated-l
@@ -3316,9 +3299,7 b' chained output'
3316 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mL,BC+revertm")'
3299 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mL,BC+revertm")'
3317 M b
3300 M b
3318 A d
3301 A d
3319 a (filelog !)
3302 a (no-changeset no-compatibility !)
3320 a (missing-correct-output sidedata !)
3321 a (missing-correct-output upgraded !)
3322 A t
3303 A t
3323 p
3304 p
3324 A unrelated-l
3305 A unrelated-l
@@ -3327,9 +3308,7 b' chained output'
3327 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mL,CB+revertm")'
3308 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mL,CB+revertm")'
3328 M b
3309 M b
3329 A d
3310 A d
3330 a (filelog !)
3311 a (no-changeset no-compatibility !)
3331 a (missing-correct-output sidedata !)
3332 a (missing-correct-output upgraded !)
3333 A t
3312 A t
3334 p
3313 p
3335 A unrelated-l
3314 A unrelated-l
@@ -3373,18 +3352,10 b' Chained output'
3373
3352
3374 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGF,Nm")' d
3353 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGF,Nm")' d
3375 A d
3354 A d
3376 a (filelog !)
3355 a (no-changeset no-compatibility !)
3377 a (missing-correct-output sidedata !)
3378 a (missing-correct-output upgraded !)
3379 h (known-bad-output sidedata !)
3380 h (known-bad-output upgraded !)
3381 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mN,GFm")' d
3356 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mN,GFm")' d
3382 A d
3357 A d
3383 a (filelog !)
3358 a (no-changeset no-compatibility !)
3384 a (missing-correct-output sidedata !)
3385 a (missing-correct-output upgraded !)
3386 h (known-bad-output sidedata !)
3387 h (known-bad-output upgraded !)
3388
3359
3389
3360
3390 Subcase: chaining conflicting rename resolution, with extra change during the merge
3361 Subcase: chaining conflicting rename resolution, with extra change during the merge
@@ -3411,11 +3382,7 b' The result from mAEm is the same for the'
3411
3382
3412 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mK,AE-change-m")' f
3383 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mK,AE-change-m")' f
3413 A f
3384 A f
3414 a (filelog !)
3385 a (no-changeset no-compatibility !)
3415 a (missing-correct-output sidedata !)
3416 a (missing-correct-output upgraded !)
3417 b (known-bad-output sidedata !)
3418 b (known-bad-output upgraded !)
3419
3386
3420
3387
3421 The result from mEAm is the same for the subsequent merge:
3388 The result from mEAm is the same for the subsequent merge:
@@ -3435,7 +3402,5 b' The result from mEAm is the same for the'
3435 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mJ,EA-change-m")' f
3402 $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mJ,EA-change-m")' f
3436 A f
3403 A f
3437 a (filelog !)
3404 a (filelog !)
3438 b (missing-correct-output sidedata !)
3405 b (sidedata !)
3439 b (missing-correct-output upgraded !)
3406 b (upgraded !)
3440 a (known-bad-output sidedata !)
3441 a (known-bad-output upgraded !)
General Comments 0
You need to be logged in to leave comments. Login now