annotate mercurial/exthelper.py @ 52032:09a54892b7ee

mergestate: reduce the number of attribute lookups This code is called a lot during updates, this is a very small but also very easy thing to do.
author Raphaël Gomès <rgomes@octobus.net>
date Wed, 21 Aug 2024 09:48:14 +0200
parents f4733654f144
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
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
51863
f4733654f144 typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents: 50798
diff changeset
12 from __future__ import annotations
41044
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
42316
c07dcf7a0247 exthelper: add some semi-useful trace logs
Augie Fackler <augie@google.com>
parents: 41279
diff changeset
21 from hgdemandimport import tracing
c07dcf7a0247 exthelper: add some semi-useful trace logs
Augie Fackler <augie@google.com>
parents: 41279
diff changeset
22
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42316
diff changeset
23
48946
642e31cb55f0 py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48913
diff changeset
24 class exthelper:
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
25 """Helper for modular extension setup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
26
41071
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
27 A single helper should be instantiated for each module of an
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
28 extension, where a command or function needs to be wrapped, or a
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
29 command, extension hook, fileset, revset or template needs to be
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
30 registered. Helper methods are then used as decorators for
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
31 these various purposes. If an extension spans multiple modules,
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
32 all helper instances should be merged in the main module.
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
33
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
34 All decorators return the original function and may be chained.
41071
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
35
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
36 Aside from the helper functions with examples below, several
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
37 registrar method aliases are available for adding commands,
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
38 configitems, filesets, revsets, and templates. Simply decorate
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
39 the appropriate methods, and assign the corresponding exthelper
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
40 variable to a module level variable of the extension. The
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
41 extension loading mechanism will handle the rest.
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
42
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
43 example::
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
44
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
45 # ext.py
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
46 eh = exthelper.exthelper()
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
47
46871
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
48 # As needed (failure to do this will mean your registration will not
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
49 # happen):
41071
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
50 cmdtable = eh.cmdtable
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
51 configtable = eh.configtable
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
52 filesetpredicate = eh.filesetpredicate
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
53 revsetpredicate = eh.revsetpredicate
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
54 templatekeyword = eh.templatekeyword
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
55
46871
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
56 # As needed (failure to do this will mean your eh.wrap*-decorated
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
57 # functions will not wrap, and/or your eh.*setup-decorated functions
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
58 # will not execute):
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
59 uisetup = eh.finaluisetup
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
60 extsetup = eh.finalextsetup
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
61 reposetup = eh.finalreposetup
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
62 uipopulate = eh.finaluipopulate
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
63
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
64 @eh.command(b'mynewcommand',
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
65 [(b'r', b'rev', [], _(b'operate on these revisions'))],
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
66 _(b'-r REV...'),
41071
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
67 helpcategory=command.CATEGORY_XXX)
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
68 def newcommand(ui, repo, *revs, **opts):
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
69 # implementation goes here
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
70
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
71 eh.configitem(b'experimental', b'foo',
41071
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
72 default=False,
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
73 )
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
74
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
75 @eh.filesetpredicate(b'lfs()')
41071
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
76 def filesetbabar(mctx, x):
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
77 return mctx.predicate(...)
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
78
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
79 @eh.revsetpredicate(b'hidden')
41071
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
80 def revsetbabar(repo, subset, x):
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
81 args = revset.getargs(x, 0, 0, b'babar accept no argument')
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
82 return [r for r in subset if b'babar' in repo[r].description()]
41071
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
83
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
84 @eh.templatekeyword(b'babar')
41071
c81bb97b0cac exthelper: add some examples for using registrar aliases
Matt Harbison <matt_harbison@yahoo.com>
parents: 41070
diff changeset
85 def kwbabar(ctx):
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
86 return b'babar'
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
87 """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
88
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
89 def __init__(self):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
90 self._uipopulatecallables = []
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
91 self._uicallables = []
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
92 self._extcallables = []
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
93 self._repocallables = []
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
94 self._commandwrappers = []
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
95 self._extcommandwrappers = []
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
96 self._functionwrappers = []
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
97 self.cmdtable = {}
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
98 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
99 self.configtable = {}
41045
c1476d095d57 exthelper: simplify configitem registration
Matt Harbison <matt_harbison@yahoo.com>
parents: 41044
diff changeset
100 self.configitem = registrar.configitem(self.configtable)
41070
8f40e21ca842 exthelper: reintroduce the ability to register filesets
Matt Harbison <matt_harbison@yahoo.com>
parents: 41069
diff changeset
101 self.filesetpredicate = registrar.filesetpredicate()
41066
0358cca1dccf exthelper: reintroduce the ability to register revsets
Matt Harbison <matt_harbison@yahoo.com>
parents: 41060
diff changeset
102 self.revsetpredicate = registrar.revsetpredicate()
41069
70ca0e846d25 exthelper: reintroduce the ability to register templates
Matt Harbison <matt_harbison@yahoo.com>
parents: 41066
diff changeset
103 self.templatekeyword = registrar.templatekeyword()
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
104
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
105 def merge(self, other):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
106 self._uicallables.extend(other._uicallables)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
107 self._uipopulatecallables.extend(other._uipopulatecallables)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
108 self._extcallables.extend(other._extcallables)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
109 self._repocallables.extend(other._repocallables)
41082
4d40f6bb4cef exthelper: switch to using the registrar merging method
Matt Harbison <matt_harbison@yahoo.com>
parents: 41071
diff changeset
110 self.filesetpredicate._merge(other.filesetpredicate)
4d40f6bb4cef exthelper: switch to using the registrar merging method
Matt Harbison <matt_harbison@yahoo.com>
parents: 41071
diff changeset
111 self.revsetpredicate._merge(other.revsetpredicate)
4d40f6bb4cef exthelper: switch to using the registrar merging method
Matt Harbison <matt_harbison@yahoo.com>
parents: 41071
diff changeset
112 self.templatekeyword._merge(other.templatekeyword)
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
113 self._commandwrappers.extend(other._commandwrappers)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
114 self._extcommandwrappers.extend(other._extcommandwrappers)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
115 self._functionwrappers.extend(other._functionwrappers)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
116 self.cmdtable.update(other.cmdtable)
48913
f254fc73d956 global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48875
diff changeset
117 for section, items in other.configtable.items():
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
118 if section in self.configtable:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
119 self.configtable[section].update(items)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
120 else:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
121 self.configtable[section] = items
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
122
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
123 def finaluisetup(self, ui):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
124 """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
125
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
126 The following operations belong here:
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 - 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
129 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
130 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
131 passed to runcommand
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
132 - Command wraps (extensions.wrapcommand)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
133 - 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
134 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
135 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
136 during extsetup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
137 - 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
138 module members
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
139 - 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
140 - pushkey setup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
141 """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
142 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
143 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
144 if opts:
41060
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
145 for opt in opts:
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
146 entry[1].append(opt)
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
147 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
148 extensions.wrapfunction(cont, funcname, wrapper)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
149 for c in self._uicallables:
43238
101ae8bbfa02 cleanup: hgdemandimport.tracing accepts strings, not bytes
Augie Fackler <augie@google.com>
parents: 43106
diff changeset
150 with tracing.log('finaluisetup: %s', repr(c)):
42316
c07dcf7a0247 exthelper: add some semi-useful trace logs
Augie Fackler <augie@google.com>
parents: 41279
diff changeset
151 c(ui)
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
152
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
153 def finaluipopulate(self, ui):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
154 """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
155
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
156 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
157
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
158 - Set up additional ui members
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
159 - Update configuration by ``ui.setconfig()``
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
160 - Extend the class dynamically
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
161 """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
162 for c in self._uipopulatecallables:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
163 c(ui)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
164
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
165 def finalextsetup(self, ui):
46871
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
166 """Method to be used as the extension extsetup
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
167
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
168 The following operations belong here:
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 - Changes depending on the status of other extensions. (if
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
171 extensions.find(b'mq'))
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
172 - 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
173 """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
174 knownexts = {}
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 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
177 if ext not in knownexts:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
178 try:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
179 e = extensions.find(ext)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
180 except KeyError:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
181 # 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
182 # it.
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
183 continue
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
184 knownexts[ext] = e.cmdtable
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
185 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
186 if opts:
41060
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
187 for opt in opts:
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
188 entry[1].append(opt)
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
189
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
190 for c in self._extcallables:
43238
101ae8bbfa02 cleanup: hgdemandimport.tracing accepts strings, not bytes
Augie Fackler <augie@google.com>
parents: 43106
diff changeset
191 with tracing.log('finalextsetup: %s', repr(c)):
42316
c07dcf7a0247 exthelper: add some semi-useful trace logs
Augie Fackler <augie@google.com>
parents: 41279
diff changeset
192 c(ui)
41044
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 def finalreposetup(self, ui, repo):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
195 """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
196
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
197 The following operations belong here:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
198
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
199 - 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
200 - Modify configuration variables
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
201 - 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
202 """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
203 for c in self._repocallables:
43238
101ae8bbfa02 cleanup: hgdemandimport.tracing accepts strings, not bytes
Augie Fackler <augie@google.com>
parents: 43106
diff changeset
204 with tracing.log('finalreposetup: %s', repr(c)):
42316
c07dcf7a0247 exthelper: add some semi-useful trace logs
Augie Fackler <augie@google.com>
parents: 41279
diff changeset
205 c(ui, repo)
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
206
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
207 def uisetup(self, call):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
208 """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
209
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
210 example::
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
211
46871
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
212 # Required, otherwise your uisetup function(s) will not execute.
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
213 uisetup = eh.finaluisetup
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
214
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
215 @eh.uisetup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
216 def setupbabar(ui):
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
217 print('this is uisetup!')
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
218 """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
219 self._uicallables.append(call)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
220 return call
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
221
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
222 def uipopulate(self, call):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
223 """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
224
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
225 example::
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
226
46871
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
227 # Required, otherwise your uipopulate function(s) will not execute.
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
228 uipopulate = eh.finaluipopulate
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
229
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
230 @eh.uipopulate
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
231 def setupfoo(ui):
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
232 print('this is uipopulate!')
41044
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 self._uipopulatecallables.append(call)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
235 return call
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 def extsetup(self, call):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
238 """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
239
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
240 example::
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
241
46871
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
242 # Required, otherwise your extsetup function(s) will not execute.
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
243 extsetup = eh.finalextsetup
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
244
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
245 @eh.extsetup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
246 def setupcelestine(ui):
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
247 print('this is extsetup!')
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
248 """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
249 self._extcallables.append(call)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
250 return call
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
251
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
252 def reposetup(self, call):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
253 """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
254
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
255 example::
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
256
46871
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
257 # Required, otherwise your reposetup function(s) will not execute.
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
258 reposetup = eh.finalreposetup
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
259
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
260 @eh.reposetup
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
261 def setupzephir(ui, repo):
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
262 print('this is reposetup!')
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
263 """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
264 self._repocallables.append(call)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
265 return call
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
266
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
267 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
268 """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
269
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
270 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
271 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
272
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
273 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
274 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
275 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
276 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
277 installed during `extsetup`.
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
278
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
279 example::
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
280
46871
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
281 # Required if `extension` is not provided
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
282 uisetup = eh.finaluisetup
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
283 # Required if `extension` is provided
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
284 extsetup = eh.finalextsetup
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
285
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
286 @eh.wrapcommand(b'summary')
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
287 def wrapsummary(orig, ui, repo, *args, **kwargs):
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
288 ui.note(b'Barry!')
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
289 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
290
41060
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
291 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
292 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
293 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
294
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
295 """
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
296 if opts is None:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
297 opts = []
41060
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
298 else:
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
299 for opt in opts:
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
300 if not isinstance(opt, tuple):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
301 raise error.ProgrammingError(b'opts must be list of tuples')
41060
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
302 if len(opt) not in (4, 5):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
303 msg = b'each opt tuple must contain 4 or 5 values'
41060
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
304 raise error.ProgrammingError(msg)
7250cbaabde0 exthelper: support the option argument when registering a command
Matt Harbison <matt_harbison@yahoo.com>
parents: 41057
diff changeset
305
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
306 def dec(wrapper):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
307 if extension is None:
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
308 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
309 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42316
diff changeset
310 self._extcommandwrappers.append(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42316
diff changeset
311 (extension, command, wrapper, opts)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42316
diff changeset
312 )
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
313 return wrapper
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42316
diff changeset
314
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
315 return dec
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
316
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
317 def wrapfunction(self, container, funcname):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
318 """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
319
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
320 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
321 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
322 (there is no extension support)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
323
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
324 example::
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
325
46871
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
326 # Required, otherwise the function will not be wrapped
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
327 uisetup = eh.finaluisetup
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
328
50798
d9e22b39041a wrapfunction: use sysstr instead of bytes as argument in "exthelper"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48946
diff changeset
329 @eh.wrapfunction(discovery, 'checkheads')
46871
887f89b100ac exthelper: improve docs to indicate what module vars are needed
Kyle Lippincott <spectral@google.com>
parents: 45932
diff changeset
330 def wrapcheckheads(orig, *args, **kwargs):
45932
bd22900e26ac exthelper: update the examples to be python3 complaint
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
331 ui.note(b'His head smashed in and his heart cut out')
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
332 return orig(*args, **kwargs)
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
333 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42316
diff changeset
334
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
335 def dec(wrapper):
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
336 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
337 return wrapper
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42316
diff changeset
338
41044
fe606f2dcae9 extensions: import the exthelper class from evolve 980565468003 (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
diff changeset
339 return dec