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