mercurial/exthelper.py
author Pierre-Yves David <pierre-yves.david@octobus.net>
Wed, 15 Feb 2023 23:39:10 +0100
changeset 50068 b35fb0e5b8d6
parent 48946 642e31cb55f0
child 50798 d9e22b39041a
permissions -rw-r--r--
rollback: avoid a `hg commit --addremove` at a critical point The rollback behavior around `hg commit --addremove` has changed slightly. It does not really matters here but keeping that variant out of the way cannot hurt.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
     1
# Copyright 2012 Logilab SA        <contact@logilab.fr>
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
     2
#                Pierre-Yves David <pierre-yves.david@ens-lyon.org>
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
     3
#                Octobus <contact@octobus.net>
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
     4
#
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
     5
# This software may be used and distributed according to the terms of the
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
     6
# GNU General Public License version 2 or any later version.
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
     7
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
     8
#####################################################################
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
     9
### Extension helper                                              ###
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    10
#####################################################################
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    11
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    12
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    13
from . import (
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    14
    commands,
41060
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
    15
    error,
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    16
    extensions,
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    17
    registrar,
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    18
)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    19
42316
c07dcf7a0247 exthelper: add some semi-useful trace logs
Augie Fackler <augie@google.com>
parents: 41279
diff changeset
    20
from hgdemandimport import tracing
c07dcf7a0247 exthelper: add some semi-useful trace logs
Augie Fackler <augie@google.com>
parents: 41279
diff changeset
    21
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42316
diff changeset
    22
48946
642e31cb55f0 py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48913
diff changeset
    23
class exthelper:
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    24
    """Helper for modular extension setup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    25
41071
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    26
    A single helper should be instantiated for each module of an
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    27
    extension, where a command or function needs to be wrapped, or a
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    28
    command, extension hook, fileset, revset or template needs to be
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    29
    registered.  Helper methods are then used as decorators for
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    30
    these various purposes.  If an extension spans multiple modules,
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    31
    all helper instances should be merged in the main module.
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    32
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    33
    All decorators return the original function and may be chained.
41071
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    34
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    35
    Aside from the helper functions with examples below, several
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    36
    registrar method aliases are available for adding commands,
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    37
    configitems, filesets, revsets, and templates.  Simply decorate
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    38
    the appropriate methods, and assign the corresponding exthelper
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    39
    variable to a module level variable of the extension.  The
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    40
    extension loading mechanism will handle the rest.
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    41
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    42
    example::
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    43
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    44
        # ext.py
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    45
        eh = exthelper.exthelper()
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    46
46871
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
    47
        # As needed (failure to do this will mean your registration will not
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
    48
        # happen):
41071
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    49
        cmdtable = eh.cmdtable
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    50
        configtable = eh.configtable
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    51
        filesetpredicate = eh.filesetpredicate
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    52
        revsetpredicate = eh.revsetpredicate
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    53
        templatekeyword = eh.templatekeyword
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    54
46871
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
    55
        # As needed (failure to do this will mean your eh.wrap*-decorated
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
    56
        # functions will not wrap, and/or your eh.*setup-decorated functions
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
    57
        # will not execute):
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
    58
        uisetup = eh.finaluisetup
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
    59
        extsetup = eh.finalextsetup
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
    60
        reposetup = eh.finalreposetup
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
    61
        uipopulate = eh.finaluipopulate
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
    62
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
    63
        @eh.command(b'mynewcommand',
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
    64
            [(b'r', b'rev', [], _(b'operate on these revisions'))],
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
    65
            _(b'-r REV...'),
41071
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    66
            helpcategory=command.CATEGORY_XXX)
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    67
        def newcommand(ui, repo, *revs, **opts):
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    68
            # implementation goes here
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    69
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
    70
        eh.configitem(b'experimental', b'foo',
41071
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    71
            default=False,
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    72
        )
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    73
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
    74
        @eh.filesetpredicate(b'lfs()')
41071
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    75
        def filesetbabar(mctx, x):
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    76
            return mctx.predicate(...)
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    77
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
    78
        @eh.revsetpredicate(b'hidden')
41071
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    79
        def revsetbabar(repo, subset, x):
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
    80
            args = revset.getargs(x, 0, 0, b'babar accept no argument')
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
    81
            return [r for r in subset if b'babar' in repo[r].description()]
41071
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    82
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
    83
        @eh.templatekeyword(b'babar')
41071
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
    84
        def kwbabar(ctx):
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
    85
            return b'babar'
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    86
    """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    87
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    88
    def __init__(self):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    89
        self._uipopulatecallables = []
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    90
        self._uicallables = []
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    91
        self._extcallables = []
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    92
        self._repocallables = []
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    93
        self._commandwrappers = []
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    94
        self._extcommandwrappers = []
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    95
        self._functionwrappers = []
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    96
        self.cmdtable = {}
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    97
        self.command = registrar.command(self.cmdtable)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    98
        self.configtable = {}
41045
c1476d095d57 exthelper: simplify configitem registration
Matt Harbison <matt_harbison@yahoo.com>
parents: 41044
diff changeset
    99
        self.configitem = registrar.configitem(self.configtable)
41070
8f40e21ca842 exthelper: reintroduce the ability to register filesets
Matt Harbison <matt_harbison@yahoo.com>
parents: 41069
diff changeset
   100
        self.filesetpredicate = registrar.filesetpredicate()
41066
0358cca1dccf exthelper: reintroduce the ability to register revsets
Matt Harbison <matt_harbison@yahoo.com>
parents: 41060
diff changeset
   101
        self.revsetpredicate = registrar.revsetpredicate()
41069
70ca0e846d25 exthelper: reintroduce the ability to register templates
Matt Harbison <matt_harbison@yahoo.com>
parents: 41066
diff changeset
   102
        self.templatekeyword = registrar.templatekeyword()
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   103
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   104
    def merge(self, other):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   105
        self._uicallables.extend(other._uicallables)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   106
        self._uipopulatecallables.extend(other._uipopulatecallables)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   107
        self._extcallables.extend(other._extcallables)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   108
        self._repocallables.extend(other._repocallables)
41082
4d40f6bb4cef exthelper: switch to using the registrar merging method
Matt Harbison <matt_harbison@yahoo.com>
parents: 41071
diff changeset
   109
        self.filesetpredicate._merge(other.filesetpredicate)
4d40f6bb4cef exthelper: switch to using the registrar merging method
Matt Harbison <matt_harbison@yahoo.com>
parents: 41071
diff changeset
   110
        self.revsetpredicate._merge(other.revsetpredicate)
4d40f6bb4cef exthelper: switch to using the registrar merging method
Matt Harbison <matt_harbison@yahoo.com>
parents: 41071
diff changeset
   111
        self.templatekeyword._merge(other.templatekeyword)
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   112
        self._commandwrappers.extend(other._commandwrappers)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   113
        self._extcommandwrappers.extend(other._extcommandwrappers)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   114
        self._functionwrappers.extend(other._functionwrappers)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   115
        self.cmdtable.update(other.cmdtable)
48913
f254fc73d956 global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48875
diff changeset
   116
        for section, items in other.configtable.items():
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   117
            if section in self.configtable:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   118
                self.configtable[section].update(items)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   119
            else:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   120
                self.configtable[section] = items
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   121
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   122
    def finaluisetup(self, ui):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   123
        """Method to be used as the extension uisetup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   124
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   125
        The following operations belong here:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   126
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   127
        - Changes to ui.__class__ . The ui object that will be used to run the
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   128
          command has not yet been created. Changes made here will affect ui
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   129
          objects created after this, and in particular the ui that will be
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   130
          passed to runcommand
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   131
        - Command wraps (extensions.wrapcommand)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   132
        - Changes that need to be visible to other extensions: because
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   133
          initialization occurs in phases (all extensions run uisetup, then all
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   134
          run extsetup), a change made here will be visible to other extensions
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   135
          during extsetup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   136
        - Monkeypatch or wrap function (extensions.wrapfunction) of dispatch
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   137
          module members
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   138
        - Setup of pre-* and post-* hooks
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   139
        - pushkey setup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   140
        """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   141
        for command, wrapper, opts in self._commandwrappers:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   142
            entry = extensions.wrapcommand(commands.table, command, wrapper)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   143
            if opts:
41060
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   144
                for opt in opts:
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   145
                    entry[1].append(opt)
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   146
        for cont, funcname, wrapper in self._functionwrappers:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   147
            extensions.wrapfunction(cont, funcname, wrapper)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   148
        for c in self._uicallables:
43238
101ae8bbfa02 cleanup: hgdemandimport.tracing accepts strings, not bytes
Augie Fackler <augie@google.com>
parents: 43106
diff changeset
   149
            with tracing.log('finaluisetup: %s', repr(c)):
42316
c07dcf7a0247 exthelper: add some semi-useful trace logs
Augie Fackler <augie@google.com>
parents: 41279
diff changeset
   150
                c(ui)
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   151
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   152
    def finaluipopulate(self, ui):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   153
        """Method to be used as the extension uipopulate
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   154
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   155
        This is called once per ui instance to:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   156
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   157
        - Set up additional ui members
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   158
        - Update configuration by ``ui.setconfig()``
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   159
        - Extend the class dynamically
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   160
        """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   161
        for c in self._uipopulatecallables:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   162
            c(ui)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   163
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   164
    def finalextsetup(self, ui):
46871
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
   165
        """Method to be used as the extension extsetup
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   166
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   167
        The following operations belong here:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   168
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   169
        - Changes depending on the status of other extensions. (if
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
   170
          extensions.find(b'mq'))
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   171
        - Add a global option to all commands
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   172
        """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   173
        knownexts = {}
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   174
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   175
        for ext, command, wrapper, opts in self._extcommandwrappers:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   176
            if ext not in knownexts:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   177
                try:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   178
                    e = extensions.find(ext)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   179
                except KeyError:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   180
                    # Extension isn't enabled, so don't bother trying to wrap
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   181
                    # it.
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   182
                    continue
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   183
                knownexts[ext] = e.cmdtable
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   184
            entry = extensions.wrapcommand(knownexts[ext], command, wrapper)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   185
            if opts:
41060
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   186
                for opt in opts:
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   187
                    entry[1].append(opt)
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   188
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   189
        for c in self._extcallables:
43238
101ae8bbfa02 cleanup: hgdemandimport.tracing accepts strings, not bytes
Augie Fackler <augie@google.com>
parents: 43106
diff changeset
   190
            with tracing.log('finalextsetup: %s', repr(c)):
42316
c07dcf7a0247 exthelper: add some semi-useful trace logs
Augie Fackler <augie@google.com>
parents: 41279
diff changeset
   191
                c(ui)
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   192
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   193
    def finalreposetup(self, ui, repo):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   194
        """Method to be used as the extension reposetup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   195
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   196
        The following operations belong here:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   197
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   198
        - All hooks but pre-* and post-*
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   199
        - Modify configuration variables
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   200
        - Changes to repo.__class__, repo.dirstate.__class__
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   201
        """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   202
        for c in self._repocallables:
43238
101ae8bbfa02 cleanup: hgdemandimport.tracing accepts strings, not bytes
Augie Fackler <augie@google.com>
parents: 43106
diff changeset
   203
            with tracing.log('finalreposetup: %s', repr(c)):
42316
c07dcf7a0247 exthelper: add some semi-useful trace logs
Augie Fackler <augie@google.com>
parents: 41279
diff changeset
   204
                c(ui, repo)
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   205
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   206
    def uisetup(self, call):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   207
        """Decorated function will be executed during uisetup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   208
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   209
        example::
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   210
46871
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
   211
            # Required, otherwise your uisetup function(s) will not execute.
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
   212
            uisetup = eh.finaluisetup
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
   213
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   214
            @eh.uisetup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   215
            def setupbabar(ui):
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
   216
                print('this is uisetup!')
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   217
        """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   218
        self._uicallables.append(call)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   219
        return call
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   220
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   221
    def uipopulate(self, call):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   222
        """Decorated function will be executed during uipopulate
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   223
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   224
        example::
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   225
46871
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
   226
            # Required, otherwise your uipopulate function(s) will not execute.
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
   227
            uipopulate = eh.finaluipopulate
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
   228
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   229
            @eh.uipopulate
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   230
            def setupfoo(ui):
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
   231
                print('this is uipopulate!')
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   232
        """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   233
        self._uipopulatecallables.append(call)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   234
        return call
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   235
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   236
    def extsetup(self, call):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   237
        """Decorated function will be executed during extsetup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   238
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   239
        example::
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   240
46871
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
   241
            # Required, otherwise your extsetup function(s) will not execute.
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
   242
            extsetup = eh.finalextsetup
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
   243
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   244
            @eh.extsetup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   245
            def setupcelestine(ui):
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
   246
                print('this is extsetup!')
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   247
        """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   248
        self._extcallables.append(call)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   249
        return call
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   250
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   251
    def reposetup(self, call):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   252
        """Decorated function will be executed during reposetup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   253
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   254
        example::
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   255
46871
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
   256
            # Required, otherwise your reposetup function(s) will not execute.
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
   257
            reposetup = eh.finalreposetup
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
   258
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   259
            @eh.reposetup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   260
            def setupzephir(ui, repo):
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
   261
                print('this is reposetup!')
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   262
        """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   263
        self._repocallables.append(call)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   264
        return call
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   265
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   266
    def wrapcommand(self, command, extension=None, opts=None):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   267
        """Decorated function is a command wrapper
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   268
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   269
        The name of the command must be given as the decorator argument.
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   270
        The wrapping is installed during `uisetup`.
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   271
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   272
        If the second option `extension` argument is provided, the wrapping
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   273
        will be applied in the extension commandtable. This argument must be a
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   274
        string that will be searched using `extension.find` if not found and
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   275
        Abort error is raised. If the wrapping applies to an extension, it is
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   276
        installed during `extsetup`.
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   277
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   278
        example::
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   279
46871
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
   280
            # Required if `extension` is not provided
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
   281
            uisetup = eh.finaluisetup
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
   282
            # Required if `extension` is provided
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
   283
            extsetup = eh.finalextsetup
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
   284
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
   285
            @eh.wrapcommand(b'summary')
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   286
            def wrapsummary(orig, ui, repo, *args, **kwargs):
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
   287
                ui.note(b'Barry!')
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   288
                return orig(ui, repo, *args, **kwargs)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   289
41060
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   290
        The `opts` argument allows specifying a list of tuples for additional
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   291
        arguments for the command.  See ``mercurial.fancyopts.fancyopts()`` for
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   292
        the format of the tuple.
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   293
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   294
        """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   295
        if opts is None:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   296
            opts = []
41060
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   297
        else:
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   298
            for opt in opts:
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   299
                if not isinstance(opt, tuple):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   300
                    raise error.ProgrammingError(b'opts must be list of tuples')
41060
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   301
                if len(opt) not in (4, 5):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   302
                    msg = b'each opt tuple must contain 4 or 5 values'
41060
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   303
                    raise error.ProgrammingError(msg)
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   304
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   305
        def dec(wrapper):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   306
            if extension is None:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   307
                self._commandwrappers.append((command, wrapper, opts))
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   308
            else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42316
diff changeset
   309
                self._extcommandwrappers.append(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42316
diff changeset
   310
                    (extension, command, wrapper, opts)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42316
diff changeset
   311
                )
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   312
            return wrapper
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42316
diff changeset
   313
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   314
        return dec
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   315
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   316
    def wrapfunction(self, container, funcname):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   317
        """Decorated function is a function wrapper
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   318
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   319
        This function takes two arguments, the container and the name of the
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   320
        function to wrap. The wrapping is performed during `uisetup`.
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   321
        (there is no extension support)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   322
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   323
        example::
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   324
46871
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
   325
            # Required, otherwise the function will not be wrapped
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
   326
            uisetup = eh.finaluisetup
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
   327
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
   328
            @eh.wrapfunction(discovery, b'checkheads')
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
   329
            def wrapcheckheads(orig, *args, **kwargs):
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
   330
                ui.note(b'His head smashed in and his heart cut out')
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   331
                return orig(*args, **kwargs)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   332
        """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42316
diff changeset
   333
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   334
        def dec(wrapper):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   335
            self._functionwrappers.append((container, funcname, wrapper))
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   336
            return wrapper
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42316
diff changeset
   337
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   338
        return dec