850 'no support for evolving merge changesets yet', |
850 'no support for evolving merge changesets yet', |
851 hint="Redo the merge a use `hg prune` to obsolete the old one") |
851 hint="Redo the merge a use `hg prune` to obsolete the old one") |
852 destbookmarks = repo.nodebookmarks(dest.node()) |
852 destbookmarks = repo.nodebookmarks(dest.node()) |
853 nodesrc = orig.node() |
853 nodesrc = orig.node() |
854 destphase = repo[nodesrc].phase() |
854 destphase = repo[nodesrc].phase() |
|
855 tr = repo.transaction('relocate') |
855 try: |
856 try: |
856 r = rebase.rebasenode(repo, orig.node(), dest.node(), |
857 try: |
857 {node.nullrev: node.nullrev}, False) |
858 r = rebase.rebasenode(repo, orig.node(), dest.node(), |
858 if r[-1]: #some conflict |
859 {node.nullrev: node.nullrev}, False) |
859 raise util.Abort( |
860 if r[-1]: #some conflict |
860 'unresolved merge conflicts (see hg help resolve)') |
861 raise util.Abort( |
861 cmdutil.duplicatecopies(repo, orig.node(), dest.node()) |
862 'unresolved merge conflicts (see hg help resolve)') |
862 nodenew = rebase.concludenode(repo, orig.node(), dest.node(), |
863 cmdutil.duplicatecopies(repo, orig.node(), dest.node()) |
863 node.nullid) |
864 nodenew = rebase.concludenode(repo, orig.node(), dest.node(), |
864 except util.Abort, exc: |
865 node.nullid) |
865 class LocalMergeFailure(MergeFailure, exc.__class__): |
866 except util.Abort, exc: |
866 pass |
867 class LocalMergeFailure(MergeFailure, exc.__class__): |
867 exc.__class__ = LocalMergeFailure |
868 pass |
868 raise |
869 exc.__class__ = LocalMergeFailure |
869 oldbookmarks = repo.nodebookmarks(nodesrc) |
870 raise |
870 if nodenew is not None: |
871 oldbookmarks = repo.nodebookmarks(nodesrc) |
871 retractboundary(repo, destphase, [nodenew]) |
872 if nodenew is not None: |
872 createmarkers(repo, [(repo[nodesrc], (repo[nodenew],))]) |
873 retractboundary(repo, destphase, [nodenew]) |
873 for book in oldbookmarks: |
874 createmarkers(repo, [(repo[nodesrc], (repo[nodenew],))]) |
874 repo._bookmarks[book] = nodenew |
875 for book in oldbookmarks: |
875 else: |
876 repo._bookmarks[book] = nodenew |
876 createmarkers(repo, [(repo[nodesrc], ())]) |
877 else: |
877 # Behave like rebase, move bookmarks to dest |
878 createmarkers(repo, [(repo[nodesrc], ())]) |
878 for book in oldbookmarks: |
879 # Behave like rebase, move bookmarks to dest |
|
880 for book in oldbookmarks: |
|
881 repo._bookmarks[book] = dest.node() |
|
882 for book in destbookmarks: # restore bookmark that rebase move |
879 repo._bookmarks[book] = dest.node() |
883 repo._bookmarks[book] = dest.node() |
880 for book in destbookmarks: # restore bookmark that rebase move |
884 if oldbookmarks or destbookmarks: |
881 repo._bookmarks[book] = dest.node() |
885 repo._bookmarks.write() |
882 if oldbookmarks or destbookmarks: |
886 tr.close() |
883 repo._bookmarks.write() |
887 finally: |
|
888 tr.release() |
884 return nodenew |
889 return nodenew |
885 |
890 |
886 def _bookmarksupdater(repo, oldid): |
891 def _bookmarksupdater(repo, oldid): |
887 """Return a callable update(newid) updating the current bookmark |
892 """Return a callable update(newid) updating the current bookmark |
888 and bookmarks bound to oldid to newid. |
893 and bookmarks bound to oldid to newid. |