hgext3rd/evolve/exthelper.py
author Matt Harbison <matt_harbison@yahoo.com>
Thu, 27 Dec 2018 23:46:35 -0500
changeset 4330 9d2d0ebc6456
parent 4329 798298fda3be
child 4331 594495e1e47e
permissions -rw-r--r--
exthelper: simplify the ability to register filesets Same mechanism as revsets earlier in this series.
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
1569
bd1468c23d88 evolve: scattered typo fixes in comments, docstrings
Greg Ward <greg@gerg.ca>
parents: 1528
diff changeset
    22
    A single helper should be instantiated for each extension. Helper
bd1468c23d88 evolve: scattered typo fixes in comments, docstrings
Greg Ward <greg@gerg.ca>
parents: 1528
diff changeset
    23
    methods are then used as decorators for various purpose.
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    24
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    25
    All decorators return the original function and may be chained.
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    26
    """
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    27
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    28
    def __init__(self):
4282
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
    29
        self._uipopulatecallables = []
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    30
        self._uicallables = []
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    31
        self._extcallables = []
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    32
        self._repocallables = []
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    33
        self._commandwrappers = []
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    34
        self._extcommandwrappers = []
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    35
        self._functionwrappers = []
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    36
        self._duckpunchers = []
2043
c64300906a32 exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2042
diff changeset
    37
        self.cmdtable = {}
3972
f715dcea5086 exthelper: drop compatibility layer for `command`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3515
diff changeset
    38
        self.command = registrar.command(self.cmdtable)
4184
b9e0cc531b2b evolve: adapt for changed @command decorator
Martin von Zweigbergk <martinvonz@google.com>
parents: 3972
diff changeset
    39
        if '^init' in commands.table:
b9e0cc531b2b evolve: adapt for changed @command decorator
Martin von Zweigbergk <martinvonz@google.com>
parents: 3972
diff changeset
    40
            olddoregister = self.command._doregister
b9e0cc531b2b evolve: adapt for changed @command decorator
Martin von Zweigbergk <martinvonz@google.com>
parents: 3972
diff changeset
    41
b9e0cc531b2b evolve: adapt for changed @command decorator
Martin von Zweigbergk <martinvonz@google.com>
parents: 3972
diff changeset
    42
            def _newdoregister(self, name, *args, **kwargs):
b9e0cc531b2b evolve: adapt for changed @command decorator
Martin von Zweigbergk <martinvonz@google.com>
parents: 3972
diff changeset
    43
                if kwargs.pop('helpbasic', False):
b9e0cc531b2b evolve: adapt for changed @command decorator
Martin von Zweigbergk <martinvonz@google.com>
parents: 3972
diff changeset
    44
                    name = '^' + name
b9e0cc531b2b evolve: adapt for changed @command decorator
Martin von Zweigbergk <martinvonz@google.com>
parents: 3972
diff changeset
    45
                return olddoregister(self, name, *args, **kwargs)
b9e0cc531b2b evolve: adapt for changed @command decorator
Martin von Zweigbergk <martinvonz@google.com>
parents: 3972
diff changeset
    46
            self.command._doregister = _newdoregister
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    47
3080
461c9d940519 evolve: registed configitems if available
Boris Feld <boris.feld@octobus.net>
parents: 2926
diff changeset
    48
        self.configtable = {}
4326
80fce30fd919 exthelper: simplify configitem registration
Matt Harbison <matt_harbison@yahoo.com>
parents: 4325
diff changeset
    49
        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
    50
        self.filesetpredicate = registrar.filesetpredicate()
4328
392f1a6a0763 exthelper: simplify the ability to register revsets
Matt Harbison <matt_harbison@yahoo.com>
parents: 4327
diff changeset
    51
        self.revsetpredicate = registrar.revsetpredicate()
4329
798298fda3be exthelper: simplify the ability to register templates
Matt Harbison <matt_harbison@yahoo.com>
parents: 4328
diff changeset
    52
        self.templatekeyword = registrar.templatekeyword()
3080
461c9d940519 evolve: registed configitems if available
Boris Feld <boris.feld@octobus.net>
parents: 2926
diff changeset
    53
2042
206a7b864c05 exthelper: add a 'merge' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2041
diff changeset
    54
    def merge(self, other):
206a7b864c05 exthelper: add a 'merge' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2041
diff changeset
    55
        self._uicallables.extend(other._uicallables)
4282
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
    56
        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
    57
        self._extcallables.extend(other._extcallables)
206a7b864c05 exthelper: add a 'merge' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2041
diff changeset
    58
        self._repocallables.extend(other._repocallables)
4330
9d2d0ebc6456 exthelper: simplify the ability to register filesets
Matt Harbison <matt_harbison@yahoo.com>
parents: 4329
diff changeset
    59
        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
    60
        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
    61
        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
    62
        self._commandwrappers.extend(other._commandwrappers)
206a7b864c05 exthelper: add a 'merge' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2041
diff changeset
    63
        self._extcommandwrappers.extend(other._extcommandwrappers)
206a7b864c05 exthelper: add a 'merge' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2041
diff changeset
    64
        self._functionwrappers.extend(other._functionwrappers)
206a7b864c05 exthelper: add a 'merge' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2041
diff changeset
    65
        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
    66
        self.cmdtable.update(other.cmdtable)
3080
461c9d940519 evolve: registed configitems if available
Boris Feld <boris.feld@octobus.net>
parents: 2926
diff changeset
    67
        for section, items in other.configtable.iteritems():
461c9d940519 evolve: registed configitems if available
Boris Feld <boris.feld@octobus.net>
parents: 2926
diff changeset
    68
            if section in self.configtable:
461c9d940519 evolve: registed configitems if available
Boris Feld <boris.feld@octobus.net>
parents: 2926
diff changeset
    69
                self.configtable[section].update(items)
461c9d940519 evolve: registed configitems if available
Boris Feld <boris.feld@octobus.net>
parents: 2926
diff changeset
    70
            else:
461c9d940519 evolve: registed configitems if available
Boris Feld <boris.feld@octobus.net>
parents: 2926
diff changeset
    71
                self.configtable[section] = items
2042
206a7b864c05 exthelper: add a 'merge' method
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 2041
diff changeset
    72
4321
00d1963f50e5 exthelper: remove '_' in final_xxx() function names to conform to hg style
Matt Harbison <matt_harbison@yahoo.com>
parents: 4284
diff changeset
    73
    def finaluisetup(self, ui):
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    74
        """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
    75
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    76
        The following operations belong here:
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    77
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    78
        - 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
    79
          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
    80
          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
    81
          passed to runcommand
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    82
        - Command wraps (extensions.wrapcommand)
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    83
        - 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
    84
          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
    85
          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
    86
          during extsetup
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    87
        - 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
    88
          module members
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    89
        - Setup of pre-* and post-* hooks
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    90
        - pushkey setup
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    91
        """
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    92
        for cont, funcname, func in self._duckpunchers:
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    93
            setattr(cont, funcname, func)
1218
dd5e62979100 wrapcommand: allow adding additional arguments to commands
Durham Goode <durham@fb.com>
parents: 1214
diff changeset
    94
        for command, wrapper, opts in self._commandwrappers:
dd5e62979100 wrapcommand: allow adding additional arguments to commands
Durham Goode <durham@fb.com>
parents: 1214
diff changeset
    95
            entry = extensions.wrapcommand(commands.table, command, wrapper)
dd5e62979100 wrapcommand: allow adding additional arguments to commands
Durham Goode <durham@fb.com>
parents: 1214
diff changeset
    96
            if opts:
4327
9521698a9894 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 4326
diff changeset
    97
                for opt in opts:
9521698a9894 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 4326
diff changeset
    98
                    entry[1].append(opt)
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
    99
        for cont, funcname, wrapper in self._functionwrappers:
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   100
            extensions.wrapfunction(cont, funcname, wrapper)
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   101
        for c in self._uicallables:
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   102
            c(ui)
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   103
4321
00d1963f50e5 exthelper: remove '_' in final_xxx() function names to conform to hg style
Matt Harbison <matt_harbison@yahoo.com>
parents: 4284
diff changeset
   104
    def finaluipopulate(self, ui):
4282
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   105
        """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
   106
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   107
        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
   108
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   109
        - Set up additional ui members
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   110
        - Update configuration by ``ui.setconfig()``
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   111
        - Extend the class dynamically
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   112
        """
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   113
        for c in self._uipopulatecallables:
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   114
            c(ui)
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   115
4321
00d1963f50e5 exthelper: remove '_' in final_xxx() function names to conform to hg style
Matt Harbison <matt_harbison@yahoo.com>
parents: 4284
diff changeset
   116
    def finalextsetup(self, ui):
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   117
        """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
   118
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   119
        The following operations belong here:
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   120
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   121
        - 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
   122
          extensions.find('mq'))
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   123
        - Add a global option to all commands
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
        knownexts = {}
2925
9efedcedd9dd evolve: use registrar.revsetpredicate to register revset predicate functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 2464
diff changeset
   126
1218
dd5e62979100 wrapcommand: allow adding additional arguments to commands
Durham Goode <durham@fb.com>
parents: 1214
diff changeset
   127
        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
   128
            if ext not in knownexts:
1219
658b0d032699 wrapcommand: fix wrapping extensions that aren't enabled
Durham Goode <durham@fb.com>
parents: 1218
diff changeset
   129
                try:
658b0d032699 wrapcommand: fix wrapping extensions that aren't enabled
Durham Goode <durham@fb.com>
parents: 1218
diff changeset
   130
                    e = extensions.find(ext)
658b0d032699 wrapcommand: fix wrapping extensions that aren't enabled
Durham Goode <durham@fb.com>
parents: 1218
diff changeset
   131
                except KeyError:
658b0d032699 wrapcommand: fix wrapping extensions that aren't enabled
Durham Goode <durham@fb.com>
parents: 1218
diff changeset
   132
                    # 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
   133
                    # it.
658b0d032699 wrapcommand: fix wrapping extensions that aren't enabled
Durham Goode <durham@fb.com>
parents: 1218
diff changeset
   134
                    continue
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   135
                knownexts[ext] = e.cmdtable
1218
dd5e62979100 wrapcommand: allow adding additional arguments to commands
Durham Goode <durham@fb.com>
parents: 1214
diff changeset
   136
            entry = extensions.wrapcommand(knownexts[ext], command, wrapper)
dd5e62979100 wrapcommand: allow adding additional arguments to commands
Durham Goode <durham@fb.com>
parents: 1214
diff changeset
   137
            if opts:
4327
9521698a9894 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 4326
diff changeset
   138
                for opt in opts:
9521698a9894 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 4326
diff changeset
   139
                    entry[1].append(opt)
1218
dd5e62979100 wrapcommand: allow adding additional arguments to commands
Durham Goode <durham@fb.com>
parents: 1214
diff changeset
   140
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   141
        for c in self._extcallables:
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   142
            c(ui)
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   143
4321
00d1963f50e5 exthelper: remove '_' in final_xxx() function names to conform to hg style
Matt Harbison <matt_harbison@yahoo.com>
parents: 4284
diff changeset
   144
    def finalreposetup(self, ui, repo):
1667
58538d6f3fb4 Grammar: the
timeless@gmail.com
parents: 1666
diff changeset
   145
        """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
   146
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   147
        The following operations belong here:
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   148
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   149
        - All hooks but pre-* and post-*
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   150
        - Modify configuration variables
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   151
        - Changes to repo.__class__, repo.dirstate.__class__
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   152
        """
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   153
        for c in self._repocallables:
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   154
            c(ui, repo)
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   155
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   156
    def uisetup(self, call):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   157
        """Decorated function will be executed during uisetup
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   158
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   159
        example::
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   160
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   161
            @eh.uisetup
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   162
            def setupbabar(ui):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   163
                print 'this is uisetup!'
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   164
        """
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   165
        self._uicallables.append(call)
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   166
        return call
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   167
4282
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   168
    def uipopulate(self, call):
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   169
        """Decorated function will be executed during uipopulate
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   170
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   171
        example::
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   172
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   173
            @eh.uipopulate
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   174
            def setupfoo(ui):
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   175
                print 'this is uipopulate!'
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   176
        """
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   177
        self._uipopulatecallables.append(call)
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   178
        return call
12e3f24f794b extensions: add uipopulate() support to exthelper
Matt Harbison <matt_harbison@yahoo.com>
parents: 4281
diff changeset
   179
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   180
    def extsetup(self, call):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   181
        """Decorated function will be executed during extsetup
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   182
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   183
        example::
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   184
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   185
            @eh.extsetup
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   186
            def setupcelestine(ui):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   187
                print 'this is extsetup!'
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   188
        """
672
f7834b360f8f evolve: fix extsetup extension helper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 671
diff changeset
   189
        self._extcallables.append(call)
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   190
        return call
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   191
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   192
    def reposetup(self, call):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   193
        """Decorated function will be executed during reposetup
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   194
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   195
        example::
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   196
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   197
            @eh.reposetup
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   198
            def setupzephir(ui, repo):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   199
                print 'this is reposetup!'
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   200
        """
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   201
        self._repocallables.append(call)
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   202
        return call
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   203
4325
7f3c25791fe2 exthelper: avoid a [] default arg to wrapcommand()
Matt Harbison <matt_harbison@yahoo.com>
parents: 4321
diff changeset
   204
    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
   205
        """Decorated function is a command wrapper
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   206
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   207
        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
   208
        The wrapping is installed during `uisetup`.
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   209
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   210
        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
   211
        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
   212
        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
   213
        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
   214
        installed during `extsetup`.
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   215
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   216
        example::
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   217
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   218
            @eh.wrapcommand('summary')
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   219
            def wrapsummary(orig, ui, repo, *args, **kwargs):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   220
                ui.note('Barry!')
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   221
                return orig(ui, repo, *args, **kwargs)
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   222
4327
9521698a9894 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 4326
diff changeset
   223
        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
   224
        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
   225
        the format of the tuple.
1218
dd5e62979100 wrapcommand: allow adding additional arguments to commands
Durham Goode <durham@fb.com>
parents: 1214
diff changeset
   226
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   227
        """
4325
7f3c25791fe2 exthelper: avoid a [] default arg to wrapcommand()
Matt Harbison <matt_harbison@yahoo.com>
parents: 4321
diff changeset
   228
        if opts is None:
7f3c25791fe2 exthelper: avoid a [] default arg to wrapcommand()
Matt Harbison <matt_harbison@yahoo.com>
parents: 4321
diff changeset
   229
            opts = []
4327
9521698a9894 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 4326
diff changeset
   230
        else:
9521698a9894 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 4326
diff changeset
   231
            for opt in opts:
9521698a9894 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 4326
diff changeset
   232
                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
   233
                    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
   234
                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
   235
                    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
   236
                    raise error.ProgrammingError(msg)
9521698a9894 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 4326
diff changeset
   237
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   238
        def dec(wrapper):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   239
            if extension is None:
1218
dd5e62979100 wrapcommand: allow adding additional arguments to commands
Durham Goode <durham@fb.com>
parents: 1214
diff changeset
   240
                self._commandwrappers.append((command, wrapper, opts))
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   241
            else:
1218
dd5e62979100 wrapcommand: allow adding additional arguments to commands
Durham Goode <durham@fb.com>
parents: 1214
diff changeset
   242
                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
   243
                                                 opts))
491
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   244
            return wrapper
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   245
        return dec
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   246
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   247
    def wrapfunction(self, container, funcname):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   248
        """Decorated function is a function wrapper
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   249
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   250
        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
   251
        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
   252
        (there is no extension support)
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
        example::
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   255
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   256
            @eh.function(discovery, 'checkheads')
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   257
            def wrapfunction(orig, *args, **kwargs):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   258
                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
   259
                return orig(*args, **kwargs)
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   260
        """
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   261
        def dec(wrapper):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   262
            self._functionwrappers.append((container, funcname, wrapper))
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   263
            return wrapper
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   264
        return dec
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   265
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   266
    def addattr(self, container, funcname):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   267
        """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
   268
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   269
        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
   270
        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
   271
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   272
        example::
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   273
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   274
            @eh.function(context.changectx, 'babar')
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   275
            def babar(ctx):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   276
                return 'babar' in ctx.description
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   277
        """
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   278
        def dec(func):
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   279
            self._duckpunchers.append((container, funcname, func))
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   280
            return func
6989d8fe4ed2 merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 490
diff changeset
   281
        return dec