view tests/printrevset.py @ 48714:c5f05c0d1c8c

merge-actions: have an attribute for narrow safetiness This allow the core doing narrow filtering to process action without explicitely listing all possible actions. This is important to make the actions system more flexible in the future. Differential Revision: https://phab.mercurial-scm.org/D12117
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Sat, 29 Jan 2022 06:21:32 +0100
parents c1d0f83d62c4
children 6000f5b25c9b
line wrap: on
line source

from __future__ import absolute_import
from mercurial.thirdparty import attr
from mercurial import (
    cmdutil,
    commands,
    extensions,
    logcmdutil,
    revsetlang,
    smartset,
)

from mercurial.utils import stringutil


def logrevset(repo, wopts):
    revs = logcmdutil._initialrevs(repo, wopts)
    if not revs:
        return None
    match, pats, slowpath = logcmdutil._makematcher(repo, revs, wopts)
    wopts = attr.evolve(wopts, pats=pats)
    return logcmdutil._makerevset(repo, wopts, slowpath)


def uisetup(ui):
    def printrevset(orig, repo, wopts):
        revs, filematcher = orig(repo, wopts)
        if wopts.opts.get(b'print_revset'):
            expr = logrevset(repo, wopts)
            if expr:
                tree = revsetlang.parse(expr)
                tree = revsetlang.analyze(tree)
            else:
                tree = []
            ui = repo.ui
            ui.write(b'%s\n' % stringutil.pprint(wopts.opts.get(b'rev', [])))
            ui.write(revsetlang.prettyformat(tree) + b'\n')
            ui.write(stringutil.prettyrepr(revs) + b'\n')
            revs = smartset.baseset()  # display no revisions
        return revs, filematcher

    extensions.wrapfunction(logcmdutil, 'getrevs', printrevset)
    aliases, entry = cmdutil.findcmd(b'log', commands.table)
    entry[1].append(
        (
            b'',
            b'print-revset',
            False,
            b'print generated revset and exit (DEPRECATED)',
        )
    )