view hgext/narrow/narrowtemplates.py @ 43591:b56c6647f65e

rebase: check for unfinished ops even when inmemory (issue6214) When using rebase.experimental.inmemory, we should be able to work well with a dirty working directory, but we can not reliably work if we're in the middle of another operation (such as another rebase), as we'll potentially stomp on some state that the other operation needs. Differential Revision: https://phab.mercurial-scm.org/D7298
author Kyle Lippincott <spectral@google.com>
date Wed, 06 Nov 2019 18:28:11 -0800
parents 687b865b95ad
children 6000f5b25c9b
line wrap: on
line source

# narrowtemplates.py - added template keywords for narrow clones
#
# Copyright 2017 Google, Inc.
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.

from __future__ import absolute_import

from mercurial import (
    registrar,
    revlog,
)

keywords = {}
templatekeyword = registrar.templatekeyword(keywords)
revsetpredicate = registrar.revsetpredicate()


def _isellipsis(repo, rev):
    if repo.changelog.flags(rev) & revlog.REVIDX_ELLIPSIS:
        return True
    return False


@templatekeyword(b'ellipsis', requires={b'repo', b'ctx'})
def ellipsis(context, mapping):
    """String. 'ellipsis' if the change is an ellipsis node, else ''."""
    repo = context.resource(mapping, b'repo')
    ctx = context.resource(mapping, b'ctx')
    if _isellipsis(repo, ctx.rev()):
        return b'ellipsis'
    return b''


@templatekeyword(b'outsidenarrow', requires={b'repo', b'ctx'})
def outsidenarrow(context, mapping):
    """String. 'outsidenarrow' if the change affects no tracked files,
    else ''."""
    repo = context.resource(mapping, b'repo')
    ctx = context.resource(mapping, b'ctx')
    m = repo.narrowmatch()
    if ctx.files() and not m.always():
        if not any(m(f) for f in ctx.files()):
            return b'outsidenarrow'
    return b''


@revsetpredicate(b'ellipsis()')
def ellipsisrevset(repo, subset, x):
    """Changesets that are ellipsis nodes."""
    return subset.filter(lambda r: _isellipsis(repo, r))