Show More
@@ -332,9 +332,20 b' def _filecommit(' | |||||
332 | ): |
|
332 | ): | |
333 | fparent1, fparent2 = fparent2, nullid |
|
333 | fparent1, fparent2 = fparent2, nullid | |
334 |
|
334 | |||
|
335 | force_new_node = False | |||
|
336 | # The file might have been deleted by merge code and user explicitly choose | |||
|
337 | # to revert the file and keep it. The other case can be where there is | |||
|
338 | # change-delete or delete-change conflict and user explicitly choose to keep | |||
|
339 | # the file. The goal is to create a new filenode for users explicit choices | |||
|
340 | if ( | |||
|
341 | repo.ui.configbool(b'experimental', b'merge-track-salvaged') | |||
|
342 | and ms.active() | |||
|
343 | and ms.extras(fname).get(b'merge-removal-candidate') == b'yes' | |||
|
344 | ): | |||
|
345 | force_new_node = True | |||
335 | # is the file changed? |
|
346 | # is the file changed? | |
336 | text = fctx.data() |
|
347 | text = fctx.data() | |
337 | if fparent2 != nullid or meta or flog.cmp(fparent1, text): |
|
348 | if fparent2 != nullid or meta or flog.cmp(fparent1, text) or force_new_node: | |
338 | if touched is None: # do not overwrite added |
|
349 | if touched is None: # do not overwrite added | |
339 | touched = 'modified' |
|
350 | touched = 'modified' | |
340 | fnode = flog.add(text, meta, tr, linkrev, fparent1, fparent2) |
|
351 | fnode = flog.add(text, meta, tr, linkrev, fparent1, fparent2) |
@@ -593,17 +593,15 b' Do all the merge combination (from the deleted or the update side \xc3\x97 keeping and deleting the file' | |||||
593 | other-file |
|
593 | other-file | |
594 | the-file |
|
594 | the-file | |
595 |
|
595 | |||
596 | XXX: This should create a new filenode because user explicitly decided to keep |
|
|||
597 | the file. If we reuse the same filenode, future merges (criss-cross ones mostly) |
|
|||
598 | will think that file remain unchanged and user explicit choice will not be taken |
|
|||
599 | in consideration. |
|
|||
600 | $ hg debugrevlogindex the-file |
|
596 | $ hg debugrevlogindex the-file | |
601 | rev linkrev nodeid p1 p2 |
|
597 | rev linkrev nodeid p1 p2 | |
602 | 0 0 4b69178b9bda 000000000000 000000000000 |
|
598 | 0 0 4b69178b9bda 000000000000 000000000000 | |
603 | 1 1 59e363a07dc8 4b69178b9bda 000000000000 |
|
599 | 1 1 59e363a07dc8 4b69178b9bda 000000000000 | |
|
600 | 2 5 885af55420b3 59e363a07dc8 000000000000 (newfilenode !) | |||
604 |
|
601 | |||
605 | $ hg update 'desc("updating-both-file")' |
|
602 | $ hg update 'desc("updating-both-file")' | |
606 |
|
|
603 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (newfilenode !) | |
|
604 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved (old !) | |||
607 | $ hg merge 'desc("delete-the-file")' -t :local |
|
605 | $ hg merge 'desc("delete-the-file")' -t :local | |
608 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved |
|
606 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved | |
609 | (branch merge, don't forget to commit) |
|
607 | (branch merge, don't forget to commit) | |
@@ -630,11 +628,13 b' in consideration.' | |||||
630 | rev linkrev nodeid p1 p2 |
|
628 | rev linkrev nodeid p1 p2 | |
631 | 0 0 4b69178b9bda 000000000000 000000000000 |
|
629 | 0 0 4b69178b9bda 000000000000 000000000000 | |
632 | 1 1 59e363a07dc8 4b69178b9bda 000000000000 |
|
630 | 1 1 59e363a07dc8 4b69178b9bda 000000000000 | |
|
631 | 2 5 885af55420b3 59e363a07dc8 000000000000 (newfilenode !) | |||
633 |
|
632 | |||
634 | $ hg log -G -T '{node|short} {desc}\n' |
|
633 | $ hg log -G -T '{node|short} {desc}\n' | |
635 | @ 5e3eccec60d8 merge-keeping-the-file-from-updated |
|
634 | @ 5e3eccec60d8 merge-keeping-the-file-from-updated | |
636 | |\ |
|
635 | |\ | |
637 |
+---o |
|
636 | +---o 38a4c3e7cac8 merge-keeping-the-file-from-deleted (newfilenode !) | |
|
637 | +---o e9b708131723 merge-keeping-the-file-from-deleted (old !) | |||
638 | | |/ |
|
638 | | |/ | |
639 | +---o a4e0e44229dc merge-deleting-the-file-from-updated |
|
639 | +---o a4e0e44229dc merge-deleting-the-file-from-updated | |
640 | | |/ |
|
640 | | |/ | |
@@ -666,16 +666,19 b' BROKEN: this should result in conflict' | |||||
666 | $ hg update --clean 'desc("merge-deleting-the-file-from-deleted")' |
|
666 | $ hg update --clean 'desc("merge-deleting-the-file-from-deleted")' | |
667 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
667 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
668 | $ hg merge 'desc("merge-keeping-the-file-from-deleted")' |
|
668 | $ hg merge 'desc("merge-keeping-the-file-from-deleted")' | |
669 |
|
|
669 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (newfilenode !) | |
|
670 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved (old !) | |||
670 | (branch merge, don't forget to commit) |
|
671 | (branch merge, don't forget to commit) | |
671 | $ ls -1 |
|
672 | $ ls -1 | |
672 | other-file |
|
673 | other-file | |
|
674 | the-file (newfilenode !) | |||
673 |
|
675 | |||
674 | (merging a deletion with keeping → conflict) |
|
676 | (merging a deletion with keeping → conflict) | |
675 | BROKEN: this should result in conflict |
|
677 | BROKEN: this should result in conflict | |
676 |
|
678 | |||
677 | $ hg update --clean 'desc("merge-deleting-the-file-from-deleted")' |
|
679 | $ hg update --clean 'desc("merge-deleting-the-file-from-deleted")' | |
678 |
0 files updated, 0 files merged, |
|
680 | 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (newfilenode !) | |
|
681 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved (old !) | |||
679 | $ hg merge 'desc("merge-keeping-the-file-from-updated")' |
|
682 | $ hg merge 'desc("merge-keeping-the-file-from-updated")' | |
680 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
683 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
681 | (branch merge, don't forget to commit) |
|
684 | (branch merge, don't forget to commit) | |
@@ -698,16 +701,19 b' BROKEN: this should result in conflict' | |||||
698 | $ hg update --clean 'desc("merge-deleting-the-file-from-updated")' |
|
701 | $ hg update --clean 'desc("merge-deleting-the-file-from-updated")' | |
699 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
702 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
700 | $ hg merge 'desc("merge-keeping-the-file-from-deleted")' |
|
703 | $ hg merge 'desc("merge-keeping-the-file-from-deleted")' | |
701 |
|
|
704 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (newfilenode !) | |
|
705 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved (old !) | |||
702 | (branch merge, don't forget to commit) |
|
706 | (branch merge, don't forget to commit) | |
703 | $ ls -1 |
|
707 | $ ls -1 | |
704 | other-file |
|
708 | other-file | |
|
709 | the-file (newfilenode !) | |||
705 |
|
710 | |||
706 | (merging a deletion with keeping → conflict) |
|
711 | (merging a deletion with keeping → conflict) | |
707 | BROKEN: this should result in conflict |
|
712 | BROKEN: this should result in conflict | |
708 |
|
713 | |||
709 | $ hg update --clean 'desc("merge-deleting-the-file-from-updated")' |
|
714 | $ hg update --clean 'desc("merge-deleting-the-file-from-updated")' | |
710 |
0 files updated, 0 files merged, |
|
715 | 0 files updated, 0 files merged, 1 files removed, 0 files unresolved (newfilenode !) | |
|
716 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved (old !) | |||
711 | $ hg merge 'desc("merge-keeping-the-file-from-updated")' |
|
717 | $ hg merge 'desc("merge-keeping-the-file-from-updated")' | |
712 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
718 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
713 | (branch merge, don't forget to commit) |
|
719 | (branch merge, don't forget to commit) | |
@@ -719,7 +725,8 b' BROKEN: this should result in conflict' | |||||
719 | $ hg update --clean 'desc("merge-keeping-the-file-from-updated")' |
|
725 | $ hg update --clean 'desc("merge-keeping-the-file-from-updated")' | |
720 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
726 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
721 | $ hg merge 'desc("merge-keeping-the-file-from-deleted")' |
|
727 | $ hg merge 'desc("merge-keeping-the-file-from-deleted")' | |
722 |
|
|
728 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (newfilenode !) | |
|
729 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved (old !) | |||
723 | (branch merge, don't forget to commit) |
|
730 | (branch merge, don't forget to commit) | |
724 | $ ls -1 |
|
731 | $ ls -1 | |
725 | other-file |
|
732 | other-file | |
@@ -729,7 +736,8 b' BROKEN: this should result in conflict' | |||||
729 | BROKEN: this should result in conflict |
|
736 | BROKEN: this should result in conflict | |
730 |
|
737 | |||
731 | $ hg update --clean 'desc("merge-keeping-the-file-from-updated")' |
|
738 | $ hg update --clean 'desc("merge-keeping-the-file-from-updated")' | |
732 |
|
|
739 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (newfilenode !) | |
|
740 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved (old !) | |||
733 | $ hg merge 'desc("merge-deleted-the-file-from-deleted")' |
|
741 | $ hg merge 'desc("merge-deleted-the-file-from-deleted")' | |
734 | abort: empty revision set |
|
742 | abort: empty revision set | |
735 | [255] |
|
743 | [255] | |
@@ -752,7 +760,8 b' BROKEN: this should result in conflict' | |||||
752 | (merging two "keeping" together → no conflict) |
|
760 | (merging two "keeping" together → no conflict) | |
753 |
|
761 | |||
754 | $ hg update --clean 'desc("merge-keeping-the-file-from-deleted")' |
|
762 | $ hg update --clean 'desc("merge-keeping-the-file-from-deleted")' | |
755 |
|
|
763 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (newfilenode !) | |
|
764 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved (old !) | |||
756 | $ hg merge 'desc("merge-keeping-the-file-from-updated")' |
|
765 | $ hg merge 'desc("merge-keeping-the-file-from-updated")' | |
757 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
766 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
758 | (branch merge, don't forget to commit) |
|
767 | (branch merge, don't forget to commit) |
General Comments 0
You need to be logged in to leave comments.
Login now