hgext/evolve.py
changeset 1023 7c8e3941241f
parent 1022 6f4fd3e49d1c
child 1024 9d538ebf3985
equal deleted inserted replaced
1022:6f4fd3e49d1c 1023:7c8e3941241f
   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.