hgext3rd/evolve/exthelper.py
author Pierre-Yves David <pierre-yves.david@octobus.net>
Thu, 06 Jun 2019 14:24:19 +0200
branchstable
changeset 4665 756db65030c6
parent 4331 594495e1e47e
child 4714 c51fc0ae7a7e
permissions -rw-r--r--
packaging: prepare release 9.0.0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4281
ac4bb904f5d8 exthelper: clarify copyright and licence for the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4254
diff changeset
     1
# Copyright 2012 Logilab SA        <contact@logilab.fr>
ac4bb904f5d8 exthelper: clarify copyright and licence for the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4254
diff changeset
     2
#                Pierre-Yves David <pierre-yves.david@ens-lyon.org>
ac4bb904f5d8 exthelper: clarify copyright and licence for the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4254
diff changeset
     3
#                Octobus <contact@octobus.net>
ac4bb904f5d8 exthelper: clarify copyright and licence for the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4254
diff changeset
     4
#
ac4bb904f5d8 exthelper: clarify copyright and licence for the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4254
diff changeset
     5
# This software may be used and distributed according to the terms of the
ac4bb904f5d8 exthelper: clarify copyright and licence for the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4254
diff changeset
     6
# GNU General Public License version 2 or any later version.
ac4bb904f5d8 exthelper: clarify copyright and licence for the module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4254
diff changeset
     7
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
     8
#####################################################################
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
     9
### Extension helper                                              ###
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    10
#####################################################################
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    11
2041
3b6550261614 exthelper: extract into its own submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2032
diff changeset
    12
from mercurial import (
3b6550261614 exthelper: extract into its own submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2032
diff changeset
    13
    commands,
4327
9521698a9894 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 4326
diff changeset
    14
    error,
2041
3b6550261614 exthelper: extract into its own submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2032
diff changeset
    15
    extensions,
2464
2b53a2a21bbb deprecation: fix cmdutil.command deprecation warning
Boris Feld <boris.feld@octobus.net>
parents: 2044
diff changeset
    16
    registrar,
2041
3b6550261614 exthelper: extract into its own submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2032
diff changeset
    17
)
3b6550261614 exthelper: extract into its own submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2032
diff changeset
    18
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    19
class exthelper(object):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    20
    """Helper for modular extension setup
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    21
4331
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    22
    A single helper should be instantiated for each module of an
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    23
    extension, where a command or function needs to be wrapped, or a
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    24
    command, extension hook, fileset, revset or template needs to be
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    25
    registered.  Helper methods are then used as decorators for
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    26
    these various purposes.  If an extension spans multiple modules,
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    27
    all helper instances should be merged in the main module.
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    28
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    29
    All decorators return the original function and may be chained.
4331
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    30
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    31
    Aside from the helper functions with examples below, several
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    32
    registrar method aliases are available for adding commands,
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    33
    configitems, filesets, revsets, and templates.  Simply decorate
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    34
    the appropriate methods, and assign the corresponding exthelper
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    35
    variable to a module level variable of the extension.  The
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    36
    extension loading mechanism will handle the rest.
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    37
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    38
    example::
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    39
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    40
        # ext.py
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    41
        eh = exthelper.exthelper()
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    42
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    43
        # As needed:
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    44
        cmdtable = eh.cmdtable
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    45
        configtable = eh.configtable
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    46
        filesetpredicate = eh.filesetpredicate
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    47
        revsetpredicate = eh.revsetpredicate
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    48
        templatekeyword = eh.templatekeyword
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    49
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    50
        @eh.command('mynewcommand',
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    51
            [('r', 'rev', [], _('operate on these revisions'))],
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    52
            _('-r REV...'),
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    53
            helpcategory=command.CATEGORY_XXX)
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    54
        def newcommand(ui, repo, *revs, **opts):
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    55
            # implementation goes here
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    56
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    57
        eh.configitem('experimental', 'foo',
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    58
            default=False,
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    59
        )
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    60
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    61
        @eh.filesetpredicate('lfs()')
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    62
        def filesetbabar(mctx, x):
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    63
            return mctx.predicate(...)
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    64
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    65
        @eh.revsetpredicate('hidden')
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    66
        def revsetbabar(repo, subset, x):
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    67
            args = revset.getargs(x, 0, 0, 'babar accept no argument')
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    68
            return [r for r in subset if 'babar' in repo[r].description()]
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    69
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    70
        @eh.templatekeyword('babar')
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    71
        def kwbabar(ctx):
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
    72
            return 'babar'
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    73
    """
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    74
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    75
    def __init__(self):
4282
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
    76
        self._uipopulatecallables = []
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    77
        self._uicallables = []
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    78
        self._extcallables = []
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    79
        self._repocallables = []
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    80
        self._commandwrappers = []
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    81
        self._extcommandwrappers = []
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    82
        self._functionwrappers = []
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    83
        self._duckpunchers = []
2043
c64300906a32 exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2042
diff changeset
    84
        self.cmdtable = {}
3972
f715dcea5086 exthelper: drop compatibility layer for `command`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3515
diff changeset
    85
        self.command = registrar.command(self.cmdtable)
4184
b9e0cc531b2b evolve: adapt for changed @command decorator
Martin von Zweigbergk <martinvonz@google.com>
parents: 3972
diff changeset
    86
        if '^init' in commands.table:
b9e0cc531b2b evolve: adapt for changed @command decorator
Martin von Zweigbergk <martinvonz@google.com>
parents: 3972
diff changeset
    87
            olddoregister = self.command._doregister
b9e0cc531b2b evolve: adapt for changed @command decorator
Martin von Zweigbergk <martinvonz@google.com>
parents: 3972
diff changeset
    88
b9e0cc531b2b evolve: adapt for changed @command decorator
Martin von Zweigbergk <martinvonz@google.com>
parents: 3972
diff changeset
    89
            def _newdoregister(self, name, *args, **kwargs):
b9e0cc531b2b evolve: adapt for changed @command decorator
Martin von Zweigbergk <martinvonz@google.com>
parents: 3972
diff changeset
    90
                if kwargs.pop('helpbasic', False):
b9e0cc531b2b evolve: adapt for changed @command decorator
Martin von Zweigbergk <martinvonz@google.com>
parents: 3972
diff changeset
    91
                    name = '^' + name
b9e0cc531b2b evolve: adapt for changed @command decorator
Martin von Zweigbergk <martinvonz@google.com>
parents: 3972
diff changeset
    92
                return olddoregister(self, name, *args, **kwargs)
b9e0cc531b2b evolve: adapt for changed @command decorator
Martin von Zweigbergk <martinvonz@google.com>
parents: 3972
diff changeset
    93
            self.command._doregister = _newdoregister
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    94
3080
461c9d940519 evolve: registed configitems if available
Boris Feld <boris.feld@octobus.net>
parents: 2926
diff changeset
    95
        self.configtable = {}
4326
80fce30fd919 exthelper: simplify configitem registration
Matt Harbison <matt_harbison@yahoo.com>
parents: 4325
diff changeset
    96
        self.configitem = registrar.configitem(self.configtable)
4330
9d2d0ebc6456 exthelper: simplify the ability to register filesets
Matt Harbison <matt_harbison@yahoo.com>
parents: 4329
diff changeset
    97
        self.filesetpredicate = registrar.filesetpredicate()
4328
392f1a6a0763 exthelper: simplify the ability to register revsets
Matt Harbison <matt_harbison@yahoo.com>
parents: 4327
diff changeset
    98
        self.revsetpredicate = registrar.revsetpredicate()
4329
798298fda3be exthelper: simplify the ability to register templates
Matt Harbison <matt_harbison@yahoo.com>
parents: 4328
diff changeset
    99
        self.templatekeyword = registrar.templatekeyword()
3080
461c9d940519 evolve: registed configitems if available
Boris Feld <boris.feld@octobus.net>
parents: 2926
diff changeset
   100
2042
206a7b864c05 exthelper: add a 'merge' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2041
diff changeset
   101
    def merge(self, other):
206a7b864c05 exthelper: add a 'merge' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2041
diff changeset
   102
        self._uicallables.extend(other._uicallables)
4282
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   103
        self._uipopulatecallables.extend(other._uipopulatecallables)
2042
206a7b864c05 exthelper: add a 'merge' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2041
diff changeset
   104
        self._extcallables.extend(other._extcallables)
206a7b864c05 exthelper: add a 'merge' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2041
diff changeset
   105
        self._repocallables.extend(other._repocallables)
4330
9d2d0ebc6456 exthelper: simplify the ability to register filesets
Matt Harbison <matt_harbison@yahoo.com>
parents: 4329
diff changeset
   106
        self.filesetpredicate._table.update(other.filesetpredicate._table)
4328
392f1a6a0763 exthelper: simplify the ability to register revsets
Matt Harbison <matt_harbison@yahoo.com>
parents: 4327
diff changeset
   107
        self.revsetpredicate._table.update(other.revsetpredicate._table)
4329
798298fda3be exthelper: simplify the ability to register templates
Matt Harbison <matt_harbison@yahoo.com>
parents: 4328
diff changeset
   108
        self.templatekeyword._table.update(other.templatekeyword._table)
2042
206a7b864c05 exthelper: add a 'merge' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2041
diff changeset
   109
        self._commandwrappers.extend(other._commandwrappers)
206a7b864c05 exthelper: add a 'merge' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2041
diff changeset
   110
        self._extcommandwrappers.extend(other._extcommandwrappers)
206a7b864c05 exthelper: add a 'merge' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2041
diff changeset
   111
        self._functionwrappers.extend(other._functionwrappers)
206a7b864c05 exthelper: add a 'merge' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2041
diff changeset
   112
        self._duckpunchers.extend(other._duckpunchers)
2043
c64300906a32 exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2042
diff changeset
   113
        self.cmdtable.update(other.cmdtable)
3080
461c9d940519 evolve: registed configitems if available
Boris Feld <boris.feld@octobus.net>
parents: 2926
diff changeset
   114
        for section, items in other.configtable.iteritems():
461c9d940519 evolve: registed configitems if available
Boris Feld <boris.feld@octobus.net>
parents: 2926
diff changeset
   115
            if section in self.configtable:
461c9d940519 evolve: registed configitems if available
Boris Feld <boris.feld@octobus.net>
parents: 2926
diff changeset
   116
                self.configtable[section].update(items)
461c9d940519 evolve: registed configitems if available
Boris Feld <boris.feld@octobus.net>
parents: 2926
diff changeset
   117
            else:
461c9d940519 evolve: registed configitems if available
Boris Feld <boris.feld@octobus.net>
parents: 2926
diff changeset
   118
                self.configtable[section] = items
2042
206a7b864c05 exthelper: add a 'merge' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2041
diff changeset
   119
4321
00d1963f50e5 exthelper: remove '_' in final_xxx() function names to conform to hg style
Matt Harbison <matt_harbison@yahoo.com>
parents: 4284
diff changeset
   120
    def finaluisetup(self, ui):
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   121
        """Method to be used as the extension uisetup
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   122
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   123
        The following operations belong here:
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   124
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   125
        - Changes to ui.__class__ . The ui object that will be used to run the
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   126
          command has not yet been created. Changes made here will affect ui
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   127
          objects created after this, and in particular the ui that will be
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   128
          passed to runcommand
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   129
        - Command wraps (extensions.wrapcommand)
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   130
        - Changes that need to be visible to other extensions: because
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   131
          initialization occurs in phases (all extensions run uisetup, then all
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   132
          run extsetup), a change made here will be visible to other extensions
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   133
          during extsetup
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   134
        - Monkeypatch or wrap function (extensions.wrapfunction) of dispatch
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   135
          module members
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   136
        - Setup of pre-* and post-* hooks
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   137
        - pushkey setup
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   138
        """
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   139
        for cont, funcname, func in self._duckpunchers:
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   140
            setattr(cont, funcname, func)
1218
dd5e62979100 wrapcommand: allow adding additional arguments to commands
Durham Goode <durham@fb.com>
parents: 1214
diff changeset
   141
        for command, wrapper, opts in self._commandwrappers:
dd5e62979100 wrapcommand: allow adding additional arguments to commands
Durham Goode <durham@fb.com>
parents: 1214
diff changeset
   142
            entry = extensions.wrapcommand(commands.table, command, wrapper)
dd5e62979100 wrapcommand: allow adding additional arguments to commands
Durham Goode <durham@fb.com>
parents: 1214
diff changeset
   143
            if opts:
4327
9521698a9894 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 4326
diff changeset
   144
                for opt in opts:
9521698a9894 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 4326
diff changeset
   145
                    entry[1].append(opt)
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   146
        for cont, funcname, wrapper in self._functionwrappers:
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   147
            extensions.wrapfunction(cont, funcname, wrapper)
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   148
        for c in self._uicallables:
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   149
            c(ui)
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   150
4321
00d1963f50e5 exthelper: remove '_' in final_xxx() function names to conform to hg style
Matt Harbison <matt_harbison@yahoo.com>
parents: 4284
diff changeset
   151
    def finaluipopulate(self, ui):
4282
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   152
        """Method to be used as the extension uipopulate
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   153
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   154
        This is called once per ui instance to:
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   155
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   156
        - Set up additional ui members
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   157
        - Update configuration by ``ui.setconfig()``
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   158
        - Extend the class dynamically
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   159
        """
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   160
        for c in self._uipopulatecallables:
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   161
            c(ui)
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   162
4321
00d1963f50e5 exthelper: remove '_' in final_xxx() function names to conform to hg style
Matt Harbison <matt_harbison@yahoo.com>
parents: 4284
diff changeset
   163
    def finalextsetup(self, ui):
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   164
        """Method to be used as a the extension extsetup
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   165
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   166
        The following operations belong here:
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   167
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   168
        - Changes depending on the status of other extensions. (if
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   169
          extensions.find('mq'))
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   170
        - Add a global option to all commands
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   171
        """
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   172
        knownexts = {}
2925
9efedcedd9dd evolve: use registrar.revsetpredicate to register revset predicate functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2464
diff changeset
   173
1218
dd5e62979100 wrapcommand: allow adding additional arguments to commands
Durham Goode <durham@fb.com>
parents: 1214
diff changeset
   174
        for ext, command, wrapper, opts in self._extcommandwrappers:
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   175
            if ext not in knownexts:
1219
658b0d032699 wrapcommand: fix wrapping extensions that aren't enabled
Durham Goode <durham@fb.com>
parents: 1218
diff changeset
   176
                try:
658b0d032699 wrapcommand: fix wrapping extensions that aren't enabled
Durham Goode <durham@fb.com>
parents: 1218
diff changeset
   177
                    e = extensions.find(ext)
658b0d032699 wrapcommand: fix wrapping extensions that aren't enabled
Durham Goode <durham@fb.com>
parents: 1218
diff changeset
   178
                except KeyError:
658b0d032699 wrapcommand: fix wrapping extensions that aren't enabled
Durham Goode <durham@fb.com>
parents: 1218
diff changeset
   179
                    # Extension isn't enabled, so don't bother trying to wrap
658b0d032699 wrapcommand: fix wrapping extensions that aren't enabled
Durham Goode <durham@fb.com>
parents: 1218
diff changeset
   180
                    # it.
658b0d032699 wrapcommand: fix wrapping extensions that aren't enabled
Durham Goode <durham@fb.com>
parents: 1218
diff changeset
   181
                    continue
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   182
                knownexts[ext] = e.cmdtable
1218
dd5e62979100 wrapcommand: allow adding additional arguments to commands
Durham Goode <durham@fb.com>
parents: 1214
diff changeset
   183
            entry = extensions.wrapcommand(knownexts[ext], command, wrapper)
dd5e62979100 wrapcommand: allow adding additional arguments to commands
Durham Goode <durham@fb.com>
parents: 1214
diff changeset
   184
            if opts:
4327
9521698a9894 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 4326
diff changeset
   185
                for opt in opts:
9521698a9894 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 4326
diff changeset
   186
                    entry[1].append(opt)
1218
dd5e62979100 wrapcommand: allow adding additional arguments to commands
Durham Goode <durham@fb.com>
parents: 1214
diff changeset
   187
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   188
        for c in self._extcallables:
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   189
            c(ui)
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   190
4321
00d1963f50e5 exthelper: remove '_' in final_xxx() function names to conform to hg style
Matt Harbison <matt_harbison@yahoo.com>
parents: 4284
diff changeset
   191
    def finalreposetup(self, ui, repo):
1667
58538d6f3fb4 Grammar: the
timeless@gmail.com
parents: 1666
diff changeset
   192
        """Method to be used as the extension reposetup
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   193
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   194
        The following operations belong here:
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   195
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   196
        - All hooks but pre-* and post-*
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   197
        - Modify configuration variables
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   198
        - Changes to repo.__class__, repo.dirstate.__class__
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   199
        """
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   200
        for c in self._repocallables:
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   201
            c(ui, repo)
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   202
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   203
    def uisetup(self, call):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   204
        """Decorated function will be executed during uisetup
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   205
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   206
        example::
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   207
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   208
            @eh.uisetup
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   209
            def setupbabar(ui):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   210
                print 'this is uisetup!'
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   211
        """
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   212
        self._uicallables.append(call)
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   213
        return call
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   214
4282
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   215
    def uipopulate(self, call):
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   216
        """Decorated function will be executed during uipopulate
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   217
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   218
        example::
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   219
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   220
            @eh.uipopulate
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   221
            def setupfoo(ui):
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   222
                print 'this is uipopulate!'
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   223
        """
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   224
        self._uipopulatecallables.append(call)
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   225
        return call
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   226
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   227
    def extsetup(self, call):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   228
        """Decorated function will be executed during extsetup
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   229
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   230
        example::
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   231
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   232
            @eh.extsetup
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   233
            def setupcelestine(ui):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   234
                print 'this is extsetup!'
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   235
        """
672
f7834b360f8f evolve: fix extsetup extension helper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 671
diff changeset
   236
        self._extcallables.append(call)
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   237
        return call
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   238
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   239
    def reposetup(self, call):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   240
        """Decorated function will be executed during reposetup
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   241
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   242
        example::
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   243
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   244
            @eh.reposetup
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   245
            def setupzephir(ui, repo):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   246
                print 'this is reposetup!'
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   247
        """
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   248
        self._repocallables.append(call)
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   249
        return call
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   250
4325
7f3c25791fe2 exthelper: avoid a [] default arg to wrapcommand()
Matt Harbison <matt_harbison@yahoo.com>
parents: 4321
diff changeset
   251
    def wrapcommand(self, command, extension=None, opts=None):
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   252
        """Decorated function is a command wrapper
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   253
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   254
        The name of the command must be given as the decorator argument.
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   255
        The wrapping is installed during `uisetup`.
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   256
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   257
        If the second option `extension` argument is provided, the wrapping
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   258
        will be applied in the extension commandtable. This argument must be a
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   259
        string that will be searched using `extension.find` if not found and
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   260
        Abort error is raised. If the wrapping applies to an extension, it is
1668
d158ba628e2a Grammar: paragraphs should end with periods
timeless@gmail.com
parents: 1667
diff changeset
   261
        installed during `extsetup`.
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   262
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   263
        example::
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   264
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   265
            @eh.wrapcommand('summary')
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   266
            def wrapsummary(orig, ui, repo, *args, **kwargs):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   267
                ui.note('Barry!')
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   268
                return orig(ui, repo, *args, **kwargs)
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   269
4327
9521698a9894 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 4326
diff changeset
   270
        The `opts` argument allows specifying a list of tuples for additional
9521698a9894 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 4326
diff changeset
   271
        arguments for the command.  See ``mercurial.fancyopts.fancyopts()`` for
9521698a9894 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 4326
diff changeset
   272
        the format of the tuple.
1218
dd5e62979100 wrapcommand: allow adding additional arguments to commands
Durham Goode <durham@fb.com>
parents: 1214
diff changeset
   273
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   274
        """
4325
7f3c25791fe2 exthelper: avoid a [] default arg to wrapcommand()
Matt Harbison <matt_harbison@yahoo.com>
parents: 4321
diff changeset
   275
        if opts is None:
7f3c25791fe2 exthelper: avoid a [] default arg to wrapcommand()
Matt Harbison <matt_harbison@yahoo.com>
parents: 4321
diff changeset
   276
            opts = []
4327
9521698a9894 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 4326
diff changeset
   277
        else:
9521698a9894 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 4326
diff changeset
   278
            for opt in opts:
9521698a9894 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 4326
diff changeset
   279
                if not isinstance(opt, tuple):
9521698a9894 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 4326
diff changeset
   280
                    raise error.ProgrammingError('opts must be list of tuples')
9521698a9894 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 4326
diff changeset
   281
                if len(opt) not in (4, 5):
9521698a9894 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 4326
diff changeset
   282
                    msg = 'each opt tuple must contain 4 or 5 values'
9521698a9894 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 4326
diff changeset
   283
                    raise error.ProgrammingError(msg)
9521698a9894 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 4326
diff changeset
   284
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   285
        def dec(wrapper):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   286
            if extension is None:
1218
dd5e62979100 wrapcommand: allow adding additional arguments to commands
Durham Goode <durham@fb.com>
parents: 1214
diff changeset
   287
                self._commandwrappers.append((command, wrapper, opts))
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   288
            else:
1218
dd5e62979100 wrapcommand: allow adding additional arguments to commands
Durham Goode <durham@fb.com>
parents: 1214
diff changeset
   289
                self._extcommandwrappers.append((extension, command, wrapper,
2032
dd7e092a854a flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2024
diff changeset
   290
                                                 opts))
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   291
            return wrapper
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   292
        return dec
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   293
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   294
    def wrapfunction(self, container, funcname):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   295
        """Decorated function is a function wrapper
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   296
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   297
        This function takes two arguments, the container and the name of the
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   298
        function to wrap. The wrapping is performed during `uisetup`.
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   299
        (there is no extension support)
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   300
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   301
        example::
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   302
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   303
            @eh.function(discovery, 'checkheads')
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   304
            def wrapfunction(orig, *args, **kwargs):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   305
                ui.note('His head smashed in and his heart cut out')
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   306
                return orig(*args, **kwargs)
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   307
        """
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   308
        def dec(wrapper):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   309
            self._functionwrappers.append((container, funcname, wrapper))
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   310
            return wrapper
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   311
        return dec
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   312
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   313
    def addattr(self, container, funcname):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   314
        """Decorated function is to be added to the container
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   315
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   316
        This function takes two arguments, the container and the name of the
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   317
        function to wrap. The wrapping is performed during `uisetup`.
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   318
4331
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
   319
        Adding attributes to a container like this is discouraged, because the
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
   320
        container modification is visible even in repositories that do not
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
   321
        have the extension loaded.  Therefore, care must be taken that the
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
   322
        function doesn't make assumptions that the extension was loaded for the
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
   323
        current repository.  For `ui` and `repo` instances, a better option is
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
   324
        to subclass the instance in `uipopulate` and `reposetup` respectively.
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
   325
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
   326
        https://www.mercurial-scm.org/wiki/WritingExtensions
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
   327
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   328
        example::
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   329
4331
594495e1e47e exthelper: update documentation with some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 4330
diff changeset
   330
            @eh.addattr(context.changectx, 'babar')
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   331
            def babar(ctx):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   332
                return 'babar' in ctx.description
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   333
        """
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   334
        def dec(func):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   335
            self._duckpunchers.append((container, funcname, func))
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   336
            return func
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   337
        return dec