view tests/printrevset.py @ 42079:fcd7a91dec23

localrepo: don't allow lookup of working directory revision It seems that repo.lookup(), which is what supports the "lookup" wire protocol command, should not allow the working copy revision input. This fixes both the pull test and the convert test I just added. Differential Revision: https://phab.mercurial-scm.org/D6215
author Martin von Zweigbergk <martinvonz@google.com>
date Fri, 05 Apr 2019 11:24:00 -0700
parents a271466cb53a
children 2372284d9457
line wrap: on
line source

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

from mercurial.utils import (
  stringutil,
)

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

def uisetup(ui):
    def printrevset(orig, repo, pats, opts):
        revs, filematcher = orig(repo, pats, opts)
        if opts.get(b'print_revset'):
            expr = logrevset(repo, pats, opts)
            if expr:
                tree = revsetlang.parse(expr)
                tree = revsetlang.analyze(tree)
            else:
                tree = []
            ui = repo.ui
            ui.write(b'%s\n' % stringutil.pprint(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)'))