589 mapping = {n: () for n in mapping} |
589 mapping = {n: () for n in mapping} |
590 |
590 |
591 with repo.transaction('cleanup') as tr: |
591 with repo.transaction('cleanup') as tr: |
592 # Move bookmarks |
592 # Move bookmarks |
593 bmarks = repo._bookmarks |
593 bmarks = repo._bookmarks |
594 bmarkchanged = False |
594 bmarkchanges = [] |
595 allnewnodes = [n for ns in mapping.values() for n in ns] |
595 allnewnodes = [n for ns in mapping.values() for n in ns] |
596 for oldnode, newnodes in mapping.items(): |
596 for oldnode, newnodes in mapping.items(): |
597 oldbmarks = repo.nodebookmarks(oldnode) |
597 oldbmarks = repo.nodebookmarks(oldnode) |
598 if not oldbmarks: |
598 if not oldbmarks: |
599 continue |
599 continue |
600 from . import bookmarks # avoid import cycle |
600 from . import bookmarks # avoid import cycle |
601 bmarkchanged = True |
|
602 if len(newnodes) > 1: |
601 if len(newnodes) > 1: |
603 # usually a split, take the one with biggest rev number |
602 # usually a split, take the one with biggest rev number |
604 newnode = next(repo.set('max(%ln)', newnodes)).node() |
603 newnode = next(repo.set('max(%ln)', newnodes)).node() |
605 elif len(newnodes) == 0: |
604 elif len(newnodes) == 0: |
606 # move bookmark backwards |
605 # move bookmark backwards |
617 # Delete divergent bookmarks being parents of related newnodes |
616 # Delete divergent bookmarks being parents of related newnodes |
618 deleterevs = repo.revs('parents(roots(%ln & (::%n))) - parents(%n)', |
617 deleterevs = repo.revs('parents(roots(%ln & (::%n))) - parents(%n)', |
619 allnewnodes, newnode, oldnode) |
618 allnewnodes, newnode, oldnode) |
620 deletenodes = _containsnode(repo, deleterevs) |
619 deletenodes = _containsnode(repo, deleterevs) |
621 for name in oldbmarks: |
620 for name in oldbmarks: |
622 bmarks[name] = newnode |
621 bmarkchanges.append((name, newnode)) |
623 bookmarks.deletedivergent(repo, deletenodes, name) |
622 for b in bookmarks.divergent2delete(repo, deletenodes, name): |
624 if bmarkchanged: |
623 bmarkchanges.append((b, None)) |
625 bmarks.recordchange(tr) |
624 |
|
625 if bmarkchanges: |
|
626 bmarks.applychanges(repo, tr, bmarkchanges) |
626 |
627 |
627 # Obsolete or strip nodes |
628 # Obsolete or strip nodes |
628 if obsolete.isenabled(repo, obsolete.createmarkersopt): |
629 if obsolete.isenabled(repo, obsolete.createmarkersopt): |
629 # If a node is already obsoleted, and we want to obsolete it |
630 # If a node is already obsoleted, and we want to obsolete it |
630 # without a successor, skip that obssolete request since it's |
631 # without a successor, skip that obssolete request since it's |