hgext3rd/topic/compat.py
author Pierre-Yves David <pierre-yves.david@octobus.net>
Mon, 18 Dec 2017 09:04:16 +0100
changeset 3315 c153441cdc0e
parent 3094 e11e018e8338
child 3560 f61a23a84dac
permissions -rw-r--r--
stablesort: record, cache and reuse jump Iterating below a merge means two things: 1) iterate over the part exclusive to the higher parents, 2) iterate from the lower parents. While iterating on the exclusive part, there will be case were we just go the next natural parent, and case were we'll have to "jump" to another revision. If we record all point this "jump" happens and their target, we can easily reproduce the iteration in the future. With that information we can iterate over the exclusive part of the merge without having to compute it entirely. In addition we store the reason of the jump. This will help the stable range processing later.

# Copyright 2017 FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
"""
Compatibility module
"""
from __future__ import absolute_import

from mercurial import (
    obsolete,
    scmutil,
    util,
)

getmarkers = None
successorssets = None
try:
    from mercurial import obsutil
    getmarkers = getattr(obsutil, 'getmarkers', None)
    successorssets = getattr(obsutil, 'successorssets', None)
except ImportError:
    pass

if getmarkers is None:
    getmarkers = obsolete.getmarkers
if successorssets is None:
    successorssets = obsolete.successorssets

def startpager(ui, cmd):
    """function to start a pager in case ui.pager() exists"""
    try:
        ui.pager(cmd)
    except AttributeError:
        pass

def cleanupnodes(repo, replacements, operation, moves=None):
    # create obsmarkers and move bookmarks
    # XXX we should be creating marker as we go instead of only at the end,
    # this makes the operations more modulars
    if util.safehasattr(scmutil, 'cleanupnodes'):
        scmutil.cleanupnodes(repo, replacements, 'changetopics',
                             moves=moves)
    else:
        relations = [(repo[o], tuple(repo[n] for n in new))
                     for (o, new) in replacements.iteritems()]
        obsolete.createmarkers(repo, relations)