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