mercurial/exthelper.py
author Matt Harbison <matt_harbison@yahoo.com>
Sun, 23 Dec 2018 21:54:56 -0500
changeset 41060 7250cbaabde0
parent 41057 f7863606d4ff
child 41066 0358cca1dccf
permissions -rw-r--r--
exthelper: support the option argument when registering a command Largefiles uses this 5th argument with push and pull, so this will be tested in the next commit. I assume the reason for unrolling and reforming the tuple in each finalxxxsetup() is to validate that something proper was passed in when registering. But it's better to explode when decorating than during the delayed actual registration.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
     1
# Copyright 2012 Logilab SA        <contact@logilab.fr>
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
     2
#                Pierre-Yves David <pierre-yves.david@ens-lyon.org>
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
     3
#                Octobus <contact@octobus.net>
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
     4
#
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
     5
# This software may be used and distributed according to the terms of the
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
     6
# GNU General Public License version 2 or any later version.
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
     7
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
     8
#####################################################################
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
     9
### Extension helper                                              ###
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    10
#####################################################################
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    11
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    12
from __future__ import absolute_import
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    13
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    14
from . import (
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    15
    commands,
41060
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
    16
    error,
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    17
    extensions,
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    18
    registrar,
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    19
)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    20
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    21
class exthelper(object):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    22
    """Helper for modular extension setup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    23
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    24
    A single helper should be instantiated for each extension. Helper
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    25
    methods are then used as decorators for various purpose.
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    26
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    27
    All decorators return the original function and may be chained.
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    28
    """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    29
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    30
    def __init__(self):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    31
        self._uipopulatecallables = []
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    32
        self._uicallables = []
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    33
        self._extcallables = []
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    34
        self._repocallables = []
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    35
        self._commandwrappers = []
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    36
        self._extcommandwrappers = []
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    37
        self._functionwrappers = []
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    38
        self._duckpunchers = []
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    39
        self.cmdtable = {}
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    40
        self.command = registrar.command(self.cmdtable)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    41
        self.configtable = {}
41045
c1476d095d57 exthelper: simplify configitem registration
Matt Harbison <matt_harbison@yahoo.com>
parents: 41044
diff changeset
    42
        self.configitem = registrar.configitem(self.configtable)
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    43
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    44
    def merge(self, other):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    45
        self._uicallables.extend(other._uicallables)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    46
        self._uipopulatecallables.extend(other._uipopulatecallables)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    47
        self._extcallables.extend(other._extcallables)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    48
        self._repocallables.extend(other._repocallables)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    49
        self._commandwrappers.extend(other._commandwrappers)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    50
        self._extcommandwrappers.extend(other._extcommandwrappers)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    51
        self._functionwrappers.extend(other._functionwrappers)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    52
        self._duckpunchers.extend(other._duckpunchers)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    53
        self.cmdtable.update(other.cmdtable)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    54
        for section, items in other.configtable.iteritems():
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    55
            if section in self.configtable:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    56
                self.configtable[section].update(items)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    57
            else:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    58
                self.configtable[section] = items
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    59
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    60
    def finaluisetup(self, ui):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    61
        """Method to be used as the extension uisetup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    62
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    63
        The following operations belong here:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    64
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    65
        - Changes to ui.__class__ . The ui object that will be used to run the
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    66
          command has not yet been created. Changes made here will affect ui
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    67
          objects created after this, and in particular the ui that will be
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    68
          passed to runcommand
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    69
        - Command wraps (extensions.wrapcommand)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    70
        - Changes that need to be visible to other extensions: because
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    71
          initialization occurs in phases (all extensions run uisetup, then all
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    72
          run extsetup), a change made here will be visible to other extensions
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    73
          during extsetup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    74
        - Monkeypatch or wrap function (extensions.wrapfunction) of dispatch
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    75
          module members
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    76
        - Setup of pre-* and post-* hooks
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    77
        - pushkey setup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    78
        """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    79
        for cont, funcname, func in self._duckpunchers:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    80
            setattr(cont, funcname, func)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    81
        for command, wrapper, opts in self._commandwrappers:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    82
            entry = extensions.wrapcommand(commands.table, command, wrapper)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    83
            if opts:
41060
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
    84
                for opt in opts:
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
    85
                    entry[1].append(opt)
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    86
        for cont, funcname, wrapper in self._functionwrappers:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    87
            extensions.wrapfunction(cont, funcname, wrapper)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    88
        for c in self._uicallables:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    89
            c(ui)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    90
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    91
    def finaluipopulate(self, ui):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    92
        """Method to be used as the extension uipopulate
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    93
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    94
        This is called once per ui instance to:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    95
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    96
        - Set up additional ui members
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    97
        - Update configuration by ``ui.setconfig()``
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    98
        - Extend the class dynamically
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
    99
        """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   100
        for c in self._uipopulatecallables:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   101
            c(ui)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   102
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   103
    def finalextsetup(self, ui):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   104
        """Method to be used as a the extension extsetup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   105
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   106
        The following operations belong here:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   107
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   108
        - Changes depending on the status of other extensions. (if
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   109
          extensions.find('mq'))
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   110
        - Add a global option to all commands
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   111
        """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   112
        knownexts = {}
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   113
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   114
        for ext, command, wrapper, opts in self._extcommandwrappers:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   115
            if ext not in knownexts:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   116
                try:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   117
                    e = extensions.find(ext)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   118
                except KeyError:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   119
                    # Extension isn't enabled, so don't bother trying to wrap
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   120
                    # it.
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   121
                    continue
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   122
                knownexts[ext] = e.cmdtable
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   123
            entry = extensions.wrapcommand(knownexts[ext], command, wrapper)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   124
            if opts:
41060
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   125
                for opt in opts:
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   126
                    entry[1].append(opt)
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   127
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   128
        for c in self._extcallables:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   129
            c(ui)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   130
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   131
    def finalreposetup(self, ui, repo):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   132
        """Method to be used as the extension reposetup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   133
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   134
        The following operations belong here:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   135
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   136
        - All hooks but pre-* and post-*
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   137
        - Modify configuration variables
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   138
        - Changes to repo.__class__, repo.dirstate.__class__
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   139
        """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   140
        for c in self._repocallables:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   141
            c(ui, repo)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   142
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   143
    def uisetup(self, call):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   144
        """Decorated function will be executed during uisetup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   145
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   146
        example::
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   147
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   148
            @eh.uisetup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   149
            def setupbabar(ui):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   150
                print 'this is uisetup!'
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   151
        """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   152
        self._uicallables.append(call)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   153
        return call
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   154
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   155
    def uipopulate(self, call):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   156
        """Decorated function will be executed during uipopulate
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   157
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   158
        example::
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   159
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   160
            @eh.uipopulate
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   161
            def setupfoo(ui):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   162
                print 'this is uipopulate!'
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   163
        """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   164
        self._uipopulatecallables.append(call)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   165
        return call
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   166
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   167
    def extsetup(self, call):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   168
        """Decorated function will be executed during extsetup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   169
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   170
        example::
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   171
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   172
            @eh.extsetup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   173
            def setupcelestine(ui):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   174
                print 'this is extsetup!'
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   175
        """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   176
        self._extcallables.append(call)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   177
        return call
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   178
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   179
    def reposetup(self, call):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   180
        """Decorated function will be executed during reposetup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   181
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   182
        example::
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   183
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   184
            @eh.reposetup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   185
            def setupzephir(ui, repo):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   186
                print 'this is reposetup!'
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   187
        """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   188
        self._repocallables.append(call)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   189
        return call
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   190
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   191
    def wrapcommand(self, command, extension=None, opts=None):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   192
        """Decorated function is a command wrapper
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   193
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   194
        The name of the command must be given as the decorator argument.
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   195
        The wrapping is installed during `uisetup`.
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   196
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   197
        If the second option `extension` argument is provided, the wrapping
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   198
        will be applied in the extension commandtable. This argument must be a
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   199
        string that will be searched using `extension.find` if not found and
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   200
        Abort error is raised. If the wrapping applies to an extension, it is
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   201
        installed during `extsetup`.
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   202
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   203
        example::
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   204
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   205
            @eh.wrapcommand('summary')
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   206
            def wrapsummary(orig, ui, repo, *args, **kwargs):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   207
                ui.note('Barry!')
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   208
                return orig(ui, repo, *args, **kwargs)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   209
41060
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   210
        The `opts` argument allows specifying a list of tuples for additional
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   211
        arguments for the command.  See ``mercurial.fancyopts.fancyopts()`` for
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   212
        the format of the tuple.
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   213
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   214
        """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   215
        if opts is None:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   216
            opts = []
41060
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   217
        else:
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   218
            for opt in opts:
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   219
                if not isinstance(opt, tuple):
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   220
                    raise error.ProgrammingError('opts must be list of tuples')
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   221
                if len(opt) not in (4, 5):
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   222
                    msg = 'each opt tuple must contain 4 or 5 values'
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   223
                    raise error.ProgrammingError(msg)
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
   224
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   225
        def dec(wrapper):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   226
            if extension is None:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   227
                self._commandwrappers.append((command, wrapper, opts))
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   228
            else:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   229
                self._extcommandwrappers.append((extension, command, wrapper,
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   230
                                                 opts))
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   231
            return wrapper
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   232
        return dec
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   233
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   234
    def wrapfunction(self, container, funcname):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   235
        """Decorated function is a function wrapper
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   236
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   237
        This function takes two arguments, the container and the name of the
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   238
        function to wrap. The wrapping is performed during `uisetup`.
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   239
        (there is no extension support)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   240
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   241
        example::
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   242
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   243
            @eh.function(discovery, 'checkheads')
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   244
            def wrapfunction(orig, *args, **kwargs):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   245
                ui.note('His head smashed in and his heart cut out')
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   246
                return orig(*args, **kwargs)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   247
        """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   248
        def dec(wrapper):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   249
            self._functionwrappers.append((container, funcname, wrapper))
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   250
            return wrapper
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   251
        return dec
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   252
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   253
    def addattr(self, container, funcname):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   254
        """Decorated function is to be added to the container
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   255
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   256
        This function takes two arguments, the container and the name of the
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   257
        function to wrap. The wrapping is performed during `uisetup`.
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   258
41057
f7863606d4ff exthelper: add a cautionary note about adding attributes to containers
Matt Harbison <matt_harbison@yahoo.com>
parents: 41056
diff changeset
   259
        Adding attributes to a container like this is discouraged, because the
f7863606d4ff exthelper: add a cautionary note about adding attributes to containers
Matt Harbison <matt_harbison@yahoo.com>
parents: 41056
diff changeset
   260
        container modification is visible even in repositories that do not
f7863606d4ff exthelper: add a cautionary note about adding attributes to containers
Matt Harbison <matt_harbison@yahoo.com>
parents: 41056
diff changeset
   261
        have the extension loaded.  Therefore, care must be taken that the
f7863606d4ff exthelper: add a cautionary note about adding attributes to containers
Matt Harbison <matt_harbison@yahoo.com>
parents: 41056
diff changeset
   262
        function doesn't make assumptions that the extension was loaded for the
f7863606d4ff exthelper: add a cautionary note about adding attributes to containers
Matt Harbison <matt_harbison@yahoo.com>
parents: 41056
diff changeset
   263
        current repository.  For `ui` and `repo` instances, a better option is
f7863606d4ff exthelper: add a cautionary note about adding attributes to containers
Matt Harbison <matt_harbison@yahoo.com>
parents: 41056
diff changeset
   264
        to subclass the instance in `uipopulate` and `reposetup` respectively.
f7863606d4ff exthelper: add a cautionary note about adding attributes to containers
Matt Harbison <matt_harbison@yahoo.com>
parents: 41056
diff changeset
   265
f7863606d4ff exthelper: add a cautionary note about adding attributes to containers
Matt Harbison <matt_harbison@yahoo.com>
parents: 41056
diff changeset
   266
        https://www.mercurial-scm.org/wiki/WritingExtensions
f7863606d4ff exthelper: add a cautionary note about adding attributes to containers
Matt Harbison <matt_harbison@yahoo.com>
parents: 41056
diff changeset
   267
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   268
        example::
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   269
41049
021496277392 exthelper: correct a documentation typo
Matt Harbison <matt_harbison@yahoo.com>
parents: 41046
diff changeset
   270
            @eh.addattr(context.changectx, 'babar')
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   271
            def babar(ctx):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   272
                return 'babar' in ctx.description
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   273
        """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   274
        def dec(func):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   275
            self._duckpunchers.append((container, funcname, func))
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   276
            return func
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
   277
        return dec