annotate mercurial/registrar.py @ 51637:3cf9e52f5e27 stable

inline-changelog: fix a critical bug in write_pending that delete data Since a93e52f0b6ff we no longer use inline-revlog for the changelog. The goal there was to solve the lack of testing for the two variants (inline vs split) and reduce the complexity of the interaction with "diverted-write" on the changelog level. However many existing repository still have inline-changelog and we automatically move them to normal revlog as soon as we have the chances. Unfortunately This conversion is buggy and can result in the destruction of the changelog.i if hook triggers the "write pending" mechanism. The bugs comes from the "revlog splitting" logic and the "write_pending" logic stepping over each other. Ironically the change in a93e52f0b6ff aims at no longer having this kind of problem. This changesets fix this issue and add associated tests. Fixing this reveal that the transaction hooks end up not seeing the pending transaction content, because the name is not right ("changelog.i.s.a" instead of "changelog.i.s") we fix this in the next changeset.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Wed, 12 Jun 2024 02:15:20 +0200
parents 4d12ffde8377
children f4733654f144
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27583
37d50250b696 registrar: add funcregistrar class to register function for specific purpose
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff changeset
1 # registrar.py - utilities to register function for specific purpose
37d50250b696 registrar: add funcregistrar class to register function for specific purpose
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff changeset
2 #
37d50250b696 registrar: add funcregistrar class to register function for specific purpose
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff changeset
3 # Copyright FUJIWARA Katsunori <foozy@lares.dti.ne.jp> and others
37d50250b696 registrar: add funcregistrar class to register function for specific purpose
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff changeset
4 #
37d50250b696 registrar: add funcregistrar class to register function for specific purpose
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff changeset
5 # This software may be used and distributed according to the terms of the
37d50250b696 registrar: add funcregistrar class to register function for specific purpose
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff changeset
6 # GNU General Public License version 2 or any later version.
37d50250b696 registrar: add funcregistrar class to register function for specific purpose
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff changeset
7
37d50250b696 registrar: add funcregistrar class to register function for specific purpose
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff changeset
8
50989
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
9 from typing import Any, List, Optional, Tuple
27583
37d50250b696 registrar: add funcregistrar class to register function for specific purpose
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff changeset
10 from . import (
33132
c467d13334ee configitems: add an official API for extensions to register config item
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32339
diff changeset
11 configitems,
30608
b52e8a4f4c0f registrar: raise a programming error on duplicated registering
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30332
diff changeset
12 error,
30059
6ffb7e0249f4 registrar: make format strings unicodes and not bytes
Augie Fackler <augie@google.com>
parents: 29933
diff changeset
13 pycompat,
27583
37d50250b696 registrar: add funcregistrar class to register function for specific purpose
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff changeset
14 )
37d50250b696 registrar: add funcregistrar class to register function for specific purpose
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff changeset
15
33132
c467d13334ee configitems: add an official API for extensions to register config item
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32339
diff changeset
16 # unlike the other registered items, config options are neither functions or
c467d13334ee configitems: add an official API for extensions to register config item
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32339
diff changeset
17 # classes. Registering the option is just small function call.
c467d13334ee configitems: add an official API for extensions to register config item
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32339
diff changeset
18 #
c467d13334ee configitems: add an official API for extensions to register config item
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32339
diff changeset
19 # We still add the official API to the registrar module for consistency with
c467d13334ee configitems: add an official API for extensions to register config item
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32339
diff changeset
20 # the other items extensions want might to register.
c467d13334ee configitems: add an official API for extensions to register config item
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32339
diff changeset
21 configitem = configitems.getitemregister
c467d13334ee configitems: add an official API for extensions to register config item
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32339
diff changeset
22
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
23
48946
642e31cb55f0 py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48875
diff changeset
24 class _funcregistrarbase:
30332
318a24b52eeb spelling: fixes of non-dictionary words
Mads Kiilerich <madski@unity3d.com>
parents: 30059
diff changeset
25 """Base of decorator to register a function for specific purpose
28392
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
26
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
27 This decorator stores decorated functions into own dict 'table'.
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
28
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
29 The least derived class can be defined by overriding 'formatdoc',
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
30 for example::
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
31
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
32 class keyword(_funcregistrarbase):
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
33 _docformat = ":%s: %s"
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
34
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
35 This should be used as below:
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
36
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
37 keyword = registrar.keyword()
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
38
46000
c1bb02738f96 registrar: clarify the documentation about some byte strings being required
Matt Harbison <matt_harbison@yahoo.com>
parents: 45942
diff changeset
39 @keyword(b'bar')
28392
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
40 def barfunc(*args, **kwargs):
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
41 '''Explanation of bar keyword ....
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
42 '''
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
43 pass
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
44
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
45 In this case:
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
46
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
47 - 'barfunc' is stored as 'bar' in '_table' of an instance 'keyword' above
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
48 - 'barfunc.__doc__' becomes ":bar: Explanation of bar keyword"
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
49 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
50
28392
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
51 def __init__(self, table=None):
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
52 if table is None:
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
53 self._table = {}
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
54 else:
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
55 self._table = table
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
56
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
57 def __call__(self, decl, *args, **kwargs):
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
58 return lambda func: self._doregister(func, decl, *args, **kwargs)
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
59
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
60 def _doregister(self, func, decl, *args, **kwargs):
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
61 name = self._getname(decl)
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
62
30608
b52e8a4f4c0f registrar: raise a programming error on duplicated registering
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30332
diff changeset
63 if name in self._table:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
64 msg = b'duplicate registration for name: "%s"' % name
30608
b52e8a4f4c0f registrar: raise a programming error on duplicated registering
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30332
diff changeset
65 raise error.ProgrammingError(msg)
b52e8a4f4c0f registrar: raise a programming error on duplicated registering
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30332
diff changeset
66
50928
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48946
diff changeset
67 if func.__doc__ and not hasattr(func, '_origdoc'):
42596
83666f011679 py3: store _origdoc as str
Martin von Zweigbergk <martinvonz@google.com>
parents: 42348
diff changeset
68 func._origdoc = func.__doc__.strip()
83666f011679 py3: store _origdoc as str
Martin von Zweigbergk <martinvonz@google.com>
parents: 42348
diff changeset
69 doc = pycompat.sysbytes(func._origdoc)
31820
45761ef1bc93 py3: have registrar process docstrings in bytes
Yuya Nishihara <yuya@tcha.org>
parents: 30608
diff changeset
70 func.__doc__ = pycompat.sysstr(self._formatdoc(decl, doc))
28392
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
71
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
72 self._table[name] = func
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
73 self._extrasetup(name, func, *args, **kwargs)
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
74
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
75 return func
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
76
41081
13f50ea8ac3b registrar: add a method to merge registrar instances
Matt Harbison <matt_harbison@yahoo.com>
parents: 40414
diff changeset
77 def _merge(self, registrarbase):
13f50ea8ac3b registrar: add a method to merge registrar instances
Matt Harbison <matt_harbison@yahoo.com>
parents: 40414
diff changeset
78 """Merge the entries of the given registrar object into this one.
13f50ea8ac3b registrar: add a method to merge registrar instances
Matt Harbison <matt_harbison@yahoo.com>
parents: 40414
diff changeset
79
13f50ea8ac3b registrar: add a method to merge registrar instances
Matt Harbison <matt_harbison@yahoo.com>
parents: 40414
diff changeset
80 The other registrar object must not contain any entries already in the
13f50ea8ac3b registrar: add a method to merge registrar instances
Matt Harbison <matt_harbison@yahoo.com>
parents: 40414
diff changeset
81 current one, or a ProgrammmingError is raised. Additionally, the types
13f50ea8ac3b registrar: add a method to merge registrar instances
Matt Harbison <matt_harbison@yahoo.com>
parents: 40414
diff changeset
82 of the two registrars must match.
13f50ea8ac3b registrar: add a method to merge registrar instances
Matt Harbison <matt_harbison@yahoo.com>
parents: 40414
diff changeset
83 """
41096
f8f61cf246f5 registrar: minor cleanup to the merge function
Matt Harbison <matt_harbison@yahoo.com>
parents: 41081
diff changeset
84 if not isinstance(registrarbase, type(self)):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
85 msg = b"cannot merge different types of registrar"
41081
13f50ea8ac3b registrar: add a method to merge registrar instances
Matt Harbison <matt_harbison@yahoo.com>
parents: 40414
diff changeset
86 raise error.ProgrammingError(msg)
13f50ea8ac3b registrar: add a method to merge registrar instances
Matt Harbison <matt_harbison@yahoo.com>
parents: 40414
diff changeset
87
41096
f8f61cf246f5 registrar: minor cleanup to the merge function
Matt Harbison <matt_harbison@yahoo.com>
parents: 41081
diff changeset
88 dups = set(registrarbase._table).intersection(self._table)
41081
13f50ea8ac3b registrar: add a method to merge registrar instances
Matt Harbison <matt_harbison@yahoo.com>
parents: 40414
diff changeset
89
13f50ea8ac3b registrar: add a method to merge registrar instances
Matt Harbison <matt_harbison@yahoo.com>
parents: 40414
diff changeset
90 if dups:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
91 msg = b'duplicate registration for names: "%s"' % b'", "'.join(dups)
41081
13f50ea8ac3b registrar: add a method to merge registrar instances
Matt Harbison <matt_harbison@yahoo.com>
parents: 40414
diff changeset
92 raise error.ProgrammingError(msg)
13f50ea8ac3b registrar: add a method to merge registrar instances
Matt Harbison <matt_harbison@yahoo.com>
parents: 40414
diff changeset
93
13f50ea8ac3b registrar: add a method to merge registrar instances
Matt Harbison <matt_harbison@yahoo.com>
parents: 40414
diff changeset
94 self._table.update(registrarbase._table)
13f50ea8ac3b registrar: add a method to merge registrar instances
Matt Harbison <matt_harbison@yahoo.com>
parents: 40414
diff changeset
95
28392
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
96 def _parsefuncdecl(self, decl):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45865
diff changeset
97 """Parse function declaration and return the name of function in it"""
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
98 i = decl.find(b'(')
28392
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
99 if i >= 0:
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
100 return decl[:i]
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
101 else:
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
102 return decl
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
103
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
104 def _getname(self, decl):
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
105 """Return the name of the registered function from decl
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
106
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
107 Derived class should override this, if it allows more
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
108 descriptive 'decl' string than just a name.
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
109 """
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
110 return decl
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
111
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
112 _docformat = None
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
113
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
114 def _formatdoc(self, decl, doc):
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
115 """Return formatted document of the registered function for help
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
116
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
117 'doc' is '__doc__.strip()' of the registered function.
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
118 """
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
119 return self._docformat % (decl, doc)
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
120
b983a2f04987 registrar: introduce new class for registration to replace funcregistrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 27585
diff changeset
121 def _extrasetup(self, name, func):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45865
diff changeset
122 """Execute extra setup for registered function, if needed"""
28393
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
123
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
124
32338
ec84db232fc2 registrar: switch @command decorator to class
Yuya Nishihara <yuya@tcha.org>
parents: 32337
diff changeset
125 class command(_funcregistrarbase):
ec84db232fc2 registrar: switch @command decorator to class
Yuya Nishihara <yuya@tcha.org>
parents: 32337
diff changeset
126 """Decorator to register a command function to table
32337
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 31886
diff changeset
127
32338
ec84db232fc2 registrar: switch @command decorator to class
Yuya Nishihara <yuya@tcha.org>
parents: 32337
diff changeset
128 This class receives a command table as its argument. The table should
32337
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 31886
diff changeset
129 be a dict.
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 31886
diff changeset
130
32338
ec84db232fc2 registrar: switch @command decorator to class
Yuya Nishihara <yuya@tcha.org>
parents: 32337
diff changeset
131 The created object can be used as a decorator for adding commands to
ec84db232fc2 registrar: switch @command decorator to class
Yuya Nishihara <yuya@tcha.org>
parents: 32337
diff changeset
132 that command table. This accepts multiple arguments to define a command.
32337
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 31886
diff changeset
133
35107
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
134 The first argument is the command name (as bytes).
32337
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 31886
diff changeset
135
35107
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
136 The `options` keyword argument is an iterable of tuples defining command
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
137 arguments. See ``mercurial.fancyopts.fancyopts()`` for the format of each
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
138 tuple.
32337
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 31886
diff changeset
139
35107
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
140 The `synopsis` argument defines a short, one line summary of how to use the
32337
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 31886
diff changeset
141 command. This shows up in the help output.
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 31886
diff changeset
142
35107
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
143 There are three arguments that control what repository (if any) is found
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
144 and passed to the decorated function: `norepo`, `optionalrepo`, and
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
145 `inferrepo`.
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
146
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
147 The `norepo` argument defines whether the command does not require a
32337
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 31886
diff changeset
148 local repository. Most commands operate against a repository, thus the
35107
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
149 default is False. When True, no repository will be passed.
32337
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 31886
diff changeset
150
35107
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
151 The `optionalrepo` argument defines whether the command optionally requires
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
152 a local repository. If no repository can be found, None will be passed
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
153 to the decorated function.
32337
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 31886
diff changeset
154
35107
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
155 The `inferrepo` argument defines whether to try to find a repository from
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
156 the command line arguments. If True, arguments will be examined for
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
157 potential repository locations. See ``findrepo()``. If a repository is
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
158 found, it will be used and passed to the decorated function.
34781
fe987d0b9e1e registrar: add support for storing the type of command in func object
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34436
diff changeset
159
37716
dfc51a482031 registrar: replace "cmdtype" with an intent-based mechanism (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37227
diff changeset
160 The `intents` argument defines a set of intended actions or capabilities
dfc51a482031 registrar: replace "cmdtype" with an intent-based mechanism (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37227
diff changeset
161 the command is taking. These intents can be used to affect the construction
dfc51a482031 registrar: replace "cmdtype" with an intent-based mechanism (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37227
diff changeset
162 of the repository object passed to the command. For example, commands
dfc51a482031 registrar: replace "cmdtype" with an intent-based mechanism (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37227
diff changeset
163 declaring that they are read-only could receive a repository that doesn't
dfc51a482031 registrar: replace "cmdtype" with an intent-based mechanism (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37227
diff changeset
164 have any methods allowing repository mutation. Other intents could be used
dfc51a482031 registrar: replace "cmdtype" with an intent-based mechanism (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37227
diff changeset
165 to prevent the command from running if the requested intent could not be
dfc51a482031 registrar: replace "cmdtype" with an intent-based mechanism (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37227
diff changeset
166 fulfilled.
34781
fe987d0b9e1e registrar: add support for storing the type of command in func object
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34436
diff changeset
167
40291
170926caf44c help: adding support for command categories
rdamazio@google.com
parents: 39122
diff changeset
168 If `helpcategory` is set (usually to one of the constants in the help
170926caf44c help: adding support for command categories
rdamazio@google.com
parents: 39122
diff changeset
169 module), the command will be displayed under that category in the help's
170926caf44c help: adding support for command categories
rdamazio@google.com
parents: 39122
diff changeset
170 list of commands.
170926caf44c help: adding support for command categories
rdamazio@google.com
parents: 39122
diff changeset
171
37716
dfc51a482031 registrar: replace "cmdtype" with an intent-based mechanism (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37227
diff changeset
172 The following intents are defined:
dfc51a482031 registrar: replace "cmdtype" with an intent-based mechanism (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37227
diff changeset
173
dfc51a482031 registrar: replace "cmdtype" with an intent-based mechanism (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37227
diff changeset
174 readonly
dfc51a482031 registrar: replace "cmdtype" with an intent-based mechanism (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37227
diff changeset
175 The command is read-only
35107
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
176
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
177 The signature of the decorated function looks like this:
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
178 def cmd(ui[, repo] [, <args>] [, <options>])
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
179
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
180 `repo` is required if `norepo` is False.
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
181 `<args>` are positional args (or `*args`) arguments, of non-option
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
182 arguments from the command line.
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
183 `<options>` are keyword arguments (or `**options`) of option arguments
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
184 from the command line.
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
185
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
186 See the WritingExtensions and MercurialApi documentation for more exhaustive
b22a0d9e0a83 docs: add args/returns docs for some cmdutil, context, and registrar functions
rlevasseur@google.com
parents: 34896
diff changeset
187 descriptions and examples.
32337
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 31886
diff changeset
188 """
32338
ec84db232fc2 registrar: switch @command decorator to class
Yuya Nishihara <yuya@tcha.org>
parents: 32337
diff changeset
189
40291
170926caf44c help: adding support for command categories
rdamazio@google.com
parents: 39122
diff changeset
190 # Command categories for grouping them in help output.
40414
444861dc1e55 help: displaying documented aliases by default
rdamazio@google.com
parents: 40295
diff changeset
191 # These can also be specified for aliases, like:
444861dc1e55 help: displaying documented aliases by default
rdamazio@google.com
parents: 40295
diff changeset
192 # [alias]
444861dc1e55 help: displaying documented aliases by default
rdamazio@google.com
parents: 40295
diff changeset
193 # myalias = something
444861dc1e55 help: displaying documented aliases by default
rdamazio@google.com
parents: 40295
diff changeset
194 # myalias:category = repo
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
195 CATEGORY_REPO_CREATION = b'repo'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
196 CATEGORY_REMOTE_REPO_MANAGEMENT = b'remote'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
197 CATEGORY_COMMITTING = b'commit'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
198 CATEGORY_CHANGE_MANAGEMENT = b'management'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
199 CATEGORY_CHANGE_ORGANIZATION = b'organization'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
200 CATEGORY_FILE_CONTENTS = b'files'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
201 CATEGORY_CHANGE_NAVIGATION = b'navigation'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
202 CATEGORY_WORKING_DIRECTORY = b'wdir'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
203 CATEGORY_IMPORT_EXPORT = b'import'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
204 CATEGORY_MAINTENANCE = b'maintenance'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
205 CATEGORY_HELP = b'help'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
206 CATEGORY_MISC = b'misc'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
207 CATEGORY_NONE = b'none'
40291
170926caf44c help: adding support for command categories
rdamazio@google.com
parents: 39122
diff changeset
208
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
209 def _doregister(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
210 self,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
211 func,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
212 name,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
213 options=(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
214 synopsis=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
215 norepo=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
216 optionalrepo=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
217 inferrepo=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
218 intents=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
219 helpcategory=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
220 helpbasic=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
221 ):
32339
92de09a05d7f registrar: unindent superfluous "if True" block
Yuya Nishihara <yuya@tcha.org>
parents: 32338
diff changeset
222 func.norepo = norepo
92de09a05d7f registrar: unindent superfluous "if True" block
Yuya Nishihara <yuya@tcha.org>
parents: 32338
diff changeset
223 func.optionalrepo = optionalrepo
92de09a05d7f registrar: unindent superfluous "if True" block
Yuya Nishihara <yuya@tcha.org>
parents: 32338
diff changeset
224 func.inferrepo = inferrepo
37716
dfc51a482031 registrar: replace "cmdtype" with an intent-based mechanism (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37227
diff changeset
225 func.intents = intents or set()
40291
170926caf44c help: adding support for command categories
rdamazio@google.com
parents: 39122
diff changeset
226 func.helpcategory = helpcategory
40295
fa88170c10bb help: adding a proper declaration for shortlist/basic commands (API)
Rodrigo Damazio <rdamazio@google.com>
parents: 40293
diff changeset
227 func.helpbasic = helpbasic
32339
92de09a05d7f registrar: unindent superfluous "if True" block
Yuya Nishihara <yuya@tcha.org>
parents: 32338
diff changeset
228 if synopsis:
92de09a05d7f registrar: unindent superfluous "if True" block
Yuya Nishihara <yuya@tcha.org>
parents: 32338
diff changeset
229 self._table[name] = func, list(options), synopsis
92de09a05d7f registrar: unindent superfluous "if True" block
Yuya Nishihara <yuya@tcha.org>
parents: 32338
diff changeset
230 else:
92de09a05d7f registrar: unindent superfluous "if True" block
Yuya Nishihara <yuya@tcha.org>
parents: 32338
diff changeset
231 self._table[name] = func, list(options)
92de09a05d7f registrar: unindent superfluous "if True" block
Yuya Nishihara <yuya@tcha.org>
parents: 32338
diff changeset
232 return func
32337
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 31886
diff changeset
233
45865
d7a508a75d72 strip: move into core
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 45403
diff changeset
234 def rename(self, old, new):
d7a508a75d72 strip: move into core
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 45403
diff changeset
235 """rename a command. Used to add aliases, debugstrip ->
d7a508a75d72 strip: move into core
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 45403
diff changeset
236 debugstrip|strip
d7a508a75d72 strip: move into core
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 45403
diff changeset
237 """
d7a508a75d72 strip: move into core
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 45403
diff changeset
238 self._table[new] = self._table.pop(old)
d7a508a75d72 strip: move into core
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 45403
diff changeset
239
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
240
37716
dfc51a482031 registrar: replace "cmdtype" with an intent-based mechanism (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37227
diff changeset
241 INTENT_READONLY = b'readonly'
dfc51a482031 registrar: replace "cmdtype" with an intent-based mechanism (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37227
diff changeset
242
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
243
28393
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
244 class revsetpredicate(_funcregistrarbase):
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
245 """Decorator to register revset predicate
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
246
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
247 Usage::
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
248
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
249 revsetpredicate = registrar.revsetpredicate()
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
250
46000
c1bb02738f96 registrar: clarify the documentation about some byte strings being required
Matt Harbison <matt_harbison@yahoo.com>
parents: 45942
diff changeset
251 @revsetpredicate(b'mypredicate(arg1, arg2[, arg3])')
28393
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
252 def mypredicatefunc(repo, subset, x):
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
253 '''Explanation of this revset predicate ....
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
254 '''
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
255 pass
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
256
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
257 The first string argument is used also in online help.
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
258
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
259 Optional argument 'safe' indicates whether a predicate is safe for
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
260 DoS attack (False by default).
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
261
29933
91a95ad985d8 revset: add 'takeorder' attribute to mark functions that need ordering flag
Yuya Nishihara <yuya@tcha.org>
parents: 28695
diff changeset
262 Optional argument 'takeorder' indicates whether a predicate function
91a95ad985d8 revset: add 'takeorder' attribute to mark functions that need ordering flag
Yuya Nishihara <yuya@tcha.org>
parents: 28695
diff changeset
263 takes ordering policy as the last argument.
91a95ad985d8 revset: add 'takeorder' attribute to mark functions that need ordering flag
Yuya Nishihara <yuya@tcha.org>
parents: 28695
diff changeset
264
34273
b0790bebfcf8 revset: move weight information to predicate
Jun Wu <quark@fb.com>
parents: 33699
diff changeset
265 Optional argument 'weight' indicates the estimated run-time cost, useful
b0790bebfcf8 revset: move weight information to predicate
Jun Wu <quark@fb.com>
parents: 33699
diff changeset
266 for static optimization, default is 1. Higher weight means more expensive.
b0790bebfcf8 revset: move weight information to predicate
Jun Wu <quark@fb.com>
parents: 33699
diff changeset
267 Usually, revsets that are fast and return only one revision has a weight of
b0790bebfcf8 revset: move weight information to predicate
Jun Wu <quark@fb.com>
parents: 33699
diff changeset
268 0.5 (ex. a symbol); revsets with O(changelog) complexity and read only the
b0790bebfcf8 revset: move weight information to predicate
Jun Wu <quark@fb.com>
parents: 33699
diff changeset
269 changelog have weight 10 (ex. author); revsets reading manifest deltas have
b0790bebfcf8 revset: move weight information to predicate
Jun Wu <quark@fb.com>
parents: 33699
diff changeset
270 weight 30 (ex. adds); revset reading manifest contents have weight 100
b0790bebfcf8 revset: move weight information to predicate
Jun Wu <quark@fb.com>
parents: 33699
diff changeset
271 (ex. contains). Note: those values are flexible. If the revset has a
b0790bebfcf8 revset: move weight information to predicate
Jun Wu <quark@fb.com>
parents: 33699
diff changeset
272 same big-O time complexity as 'contains', but with a smaller constant, it
b0790bebfcf8 revset: move weight information to predicate
Jun Wu <quark@fb.com>
parents: 33699
diff changeset
273 might have a weight of 90.
b0790bebfcf8 revset: move weight information to predicate
Jun Wu <quark@fb.com>
parents: 33699
diff changeset
274
28393
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
275 'revsetpredicate' instance in example above can be used to
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
276 decorate multiple functions.
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
277
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
278 Decorated functions are registered automatically at loading
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
279 extension, if an instance named as 'revsetpredicate' is used for
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
280 decorating in extension.
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
281
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
282 Otherwise, explicit 'revset.loadpredicate()' is needed.
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
283 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
284
28393
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
285 _getname = _funcregistrarbase._parsefuncdecl
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
286 _docformat = b"``%s``\n %s"
28393
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
287
34273
b0790bebfcf8 revset: move weight information to predicate
Jun Wu <quark@fb.com>
parents: 33699
diff changeset
288 def _extrasetup(self, name, func, safe=False, takeorder=False, weight=1):
28393
ac11ba7c2e56 registrar: define revsetpredicate to decorate revset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28392
diff changeset
289 func._safe = safe
29933
91a95ad985d8 revset: add 'takeorder' attribute to mark functions that need ordering flag
Yuya Nishihara <yuya@tcha.org>
parents: 28695
diff changeset
290 func._takeorder = takeorder
34273
b0790bebfcf8 revset: move weight information to predicate
Jun Wu <quark@fb.com>
parents: 33699
diff changeset
291 func._weight = weight
28447
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
292
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
293
28447
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
294 class filesetpredicate(_funcregistrarbase):
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
295 """Decorator to register fileset predicate
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
296
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
297 Usage::
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
298
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
299 filesetpredicate = registrar.filesetpredicate()
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
300
46000
c1bb02738f96 registrar: clarify the documentation about some byte strings being required
Matt Harbison <matt_harbison@yahoo.com>
parents: 45942
diff changeset
301 @filesetpredicate(b'mypredicate()')
28447
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
302 def mypredicatefunc(mctx, x):
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
303 '''Explanation of this fileset predicate ....
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
304 '''
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
305 pass
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
306
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
307 The first string argument is used also in online help.
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
308
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
309 Optional argument 'callstatus' indicates whether a predicate
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
310 implies 'matchctx.status()' at runtime or not (False, by
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
311 default).
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
312
38829
7e7e2b2ff284 fileset: add stub for weight-based optimization
Yuya Nishihara <yuya@tcha.org>
parents: 38690
diff changeset
313 Optional argument 'weight' indicates the estimated run-time cost, useful
7e7e2b2ff284 fileset: add stub for weight-based optimization
Yuya Nishihara <yuya@tcha.org>
parents: 38690
diff changeset
314 for static optimization, default is 1. Higher weight means more expensive.
38863
61ab546b71c3 fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org>
parents: 38830
diff changeset
315 There are predefined weights in the 'filesetlang' module.
38829
7e7e2b2ff284 fileset: add stub for weight-based optimization
Yuya Nishihara <yuya@tcha.org>
parents: 38690
diff changeset
316
38830
bfd5def3fe02 fileset: roughly adjust weights of functions
Yuya Nishihara <yuya@tcha.org>
parents: 38829
diff changeset
317 ====== =============================================================
bfd5def3fe02 fileset: roughly adjust weights of functions
Yuya Nishihara <yuya@tcha.org>
parents: 38829
diff changeset
318 Weight Description and examples
bfd5def3fe02 fileset: roughly adjust weights of functions
Yuya Nishihara <yuya@tcha.org>
parents: 38829
diff changeset
319 ====== =============================================================
bfd5def3fe02 fileset: roughly adjust weights of functions
Yuya Nishihara <yuya@tcha.org>
parents: 38829
diff changeset
320 0.5 basic match patterns (e.g. a symbol)
bfd5def3fe02 fileset: roughly adjust weights of functions
Yuya Nishihara <yuya@tcha.org>
parents: 38829
diff changeset
321 10 computing status (e.g. added()) or accessing a few files
bfd5def3fe02 fileset: roughly adjust weights of functions
Yuya Nishihara <yuya@tcha.org>
parents: 38829
diff changeset
322 30 reading file content for each (e.g. grep())
bfd5def3fe02 fileset: roughly adjust weights of functions
Yuya Nishihara <yuya@tcha.org>
parents: 38829
diff changeset
323 50 scanning working directory (ignored())
bfd5def3fe02 fileset: roughly adjust weights of functions
Yuya Nishihara <yuya@tcha.org>
parents: 38829
diff changeset
324 ====== =============================================================
bfd5def3fe02 fileset: roughly adjust weights of functions
Yuya Nishihara <yuya@tcha.org>
parents: 38829
diff changeset
325
28447
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
326 'filesetpredicate' instance in example above can be used to
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
327 decorate multiple functions.
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
328
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
329 Decorated functions are registered automatically at loading
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
330 extension, if an instance named as 'filesetpredicate' is used for
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
331 decorating in extension.
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
332
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
333 Otherwise, explicit 'fileset.loadpredicate()' is needed.
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
334 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
335
28447
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
336 _getname = _funcregistrarbase._parsefuncdecl
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
337 _docformat = b"``%s``\n %s"
28447
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
338
38829
7e7e2b2ff284 fileset: add stub for weight-based optimization
Yuya Nishihara <yuya@tcha.org>
parents: 38690
diff changeset
339 def _extrasetup(self, name, func, callstatus=False, weight=1):
28447
4eb5496c2bd4 registrar: add filesetpredicate to mark a function as fileset predicate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28446
diff changeset
340 func._callstatus = callstatus
38829
7e7e2b2ff284 fileset: add stub for weight-based optimization
Yuya Nishihara <yuya@tcha.org>
parents: 38690
diff changeset
341 func._weight = weight
28538
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28447
diff changeset
342
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
343
28538
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28447
diff changeset
344 class _templateregistrarbase(_funcregistrarbase):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45865
diff changeset
345 """Base of decorator to register functions as template specific one"""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
346
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
347 _docformat = b":%s: %s"
28538
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28447
diff changeset
348
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
349
28538
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28447
diff changeset
350 class templatekeyword(_templateregistrarbase):
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28447
diff changeset
351 """Decorator to register template keyword
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28447
diff changeset
352
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28447
diff changeset
353 Usage::
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28447
diff changeset
354
30332
318a24b52eeb spelling: fixes of non-dictionary words
Mads Kiilerich <madski@unity3d.com>
parents: 30059
diff changeset
355 templatekeyword = registrar.templatekeyword()
28538
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28447
diff changeset
356
36445
e8d37838f5df templatekw: add 'requires' flag to switch to exception-safe interface
Yuya Nishihara <yuya@tcha.org>
parents: 35107
diff changeset
357 # new API (since Mercurial 4.6)
46000
c1bb02738f96 registrar: clarify the documentation about some byte strings being required
Matt Harbison <matt_harbison@yahoo.com>
parents: 45942
diff changeset
358 @templatekeyword(b'mykeyword', requires={b'repo', b'ctx'})
36445
e8d37838f5df templatekw: add 'requires' flag to switch to exception-safe interface
Yuya Nishihara <yuya@tcha.org>
parents: 35107
diff changeset
359 def mykeywordfunc(context, mapping):
e8d37838f5df templatekw: add 'requires' flag to switch to exception-safe interface
Yuya Nishihara <yuya@tcha.org>
parents: 35107
diff changeset
360 '''Explanation of this template keyword ....
e8d37838f5df templatekw: add 'requires' flag to switch to exception-safe interface
Yuya Nishihara <yuya@tcha.org>
parents: 35107
diff changeset
361 '''
e8d37838f5df templatekw: add 'requires' flag to switch to exception-safe interface
Yuya Nishihara <yuya@tcha.org>
parents: 35107
diff changeset
362 pass
e8d37838f5df templatekw: add 'requires' flag to switch to exception-safe interface
Yuya Nishihara <yuya@tcha.org>
parents: 35107
diff changeset
363
28538
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28447
diff changeset
364 The first string argument is used also in online help.
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28447
diff changeset
365
36445
e8d37838f5df templatekw: add 'requires' flag to switch to exception-safe interface
Yuya Nishihara <yuya@tcha.org>
parents: 35107
diff changeset
366 Optional argument 'requires' should be a collection of resource names
42348
de65ae32b82d templatekw: change default value of 'requires' to ()
Yuya Nishihara <yuya@tcha.org>
parents: 42337
diff changeset
367 which the template keyword depends on.
36445
e8d37838f5df templatekw: add 'requires' flag to switch to exception-safe interface
Yuya Nishihara <yuya@tcha.org>
parents: 35107
diff changeset
368
28538
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28447
diff changeset
369 'templatekeyword' instance in example above can be used to
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28447
diff changeset
370 decorate multiple functions.
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28447
diff changeset
371
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28447
diff changeset
372 Decorated functions are registered automatically at loading
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28447
diff changeset
373 extension, if an instance named as 'templatekeyword' is used for
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28447
diff changeset
374 decorating in extension.
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28447
diff changeset
375
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28447
diff changeset
376 Otherwise, explicit 'templatekw.loadkeyword()' is needed.
009f58f1ea75 registrar: add templatekeyword to mark a function as template keyword (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28447
diff changeset
377 """
28692
6b3b958daf03 registrar: add templatefilter to mark a function as template filter (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
378
42348
de65ae32b82d templatekw: change default value of 'requires' to ()
Yuya Nishihara <yuya@tcha.org>
parents: 42337
diff changeset
379 def _extrasetup(self, name, func, requires=()):
36445
e8d37838f5df templatekw: add 'requires' flag to switch to exception-safe interface
Yuya Nishihara <yuya@tcha.org>
parents: 35107
diff changeset
380 func._requires = requires
e8d37838f5df templatekw: add 'requires' flag to switch to exception-safe interface
Yuya Nishihara <yuya@tcha.org>
parents: 35107
diff changeset
381
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
382
28692
6b3b958daf03 registrar: add templatefilter to mark a function as template filter (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
383 class templatefilter(_templateregistrarbase):
6b3b958daf03 registrar: add templatefilter to mark a function as template filter (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
384 """Decorator to register template filer
6b3b958daf03 registrar: add templatefilter to mark a function as template filter (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
385
6b3b958daf03 registrar: add templatefilter to mark a function as template filter (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
386 Usage::
6b3b958daf03 registrar: add templatefilter to mark a function as template filter (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
387
6b3b958daf03 registrar: add templatefilter to mark a function as template filter (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
388 templatefilter = registrar.templatefilter()
6b3b958daf03 registrar: add templatefilter to mark a function as template filter (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
389
46000
c1bb02738f96 registrar: clarify the documentation about some byte strings being required
Matt Harbison <matt_harbison@yahoo.com>
parents: 45942
diff changeset
390 @templatefilter(b'myfilter', intype=bytes)
28692
6b3b958daf03 registrar: add templatefilter to mark a function as template filter (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
391 def myfilterfunc(text):
6b3b958daf03 registrar: add templatefilter to mark a function as template filter (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
392 '''Explanation of this template filter ....
6b3b958daf03 registrar: add templatefilter to mark a function as template filter (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
393 '''
6b3b958daf03 registrar: add templatefilter to mark a function as template filter (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
394 pass
6b3b958daf03 registrar: add templatefilter to mark a function as template filter (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
395
6b3b958daf03 registrar: add templatefilter to mark a function as template filter (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
396 The first string argument is used also in online help.
6b3b958daf03 registrar: add templatefilter to mark a function as template filter (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
397
37222
54355c243042 templatefilters: allow declaration of input data type
Yuya Nishihara <yuya@tcha.org>
parents: 36922
diff changeset
398 Optional argument 'intype' defines the type of the input argument,
37227
9bcf096a2da2 templatefilters: declare input type as date where appropriate
Yuya Nishihara <yuya@tcha.org>
parents: 37222
diff changeset
399 which should be (bytes, int, templateutil.date, or None for any.)
37222
54355c243042 templatefilters: allow declaration of input data type
Yuya Nishihara <yuya@tcha.org>
parents: 36922
diff changeset
400
28692
6b3b958daf03 registrar: add templatefilter to mark a function as template filter (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
401 'templatefilter' instance in example above can be used to
6b3b958daf03 registrar: add templatefilter to mark a function as template filter (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
402 decorate multiple functions.
6b3b958daf03 registrar: add templatefilter to mark a function as template filter (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
403
6b3b958daf03 registrar: add templatefilter to mark a function as template filter (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
404 Decorated functions are registered automatically at loading
6b3b958daf03 registrar: add templatefilter to mark a function as template filter (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
405 extension, if an instance named as 'templatefilter' is used for
6b3b958daf03 registrar: add templatefilter to mark a function as template filter (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
406 decorating in extension.
6b3b958daf03 registrar: add templatefilter to mark a function as template filter (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
407
6b3b958daf03 registrar: add templatefilter to mark a function as template filter (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
408 Otherwise, explicit 'templatefilters.loadkeyword()' is needed.
6b3b958daf03 registrar: add templatefilter to mark a function as template filter (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28538
diff changeset
409 """
28695
cc103bd0dbf9 registrar: add templatefunc to mark a function as template function (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28692
diff changeset
410
37222
54355c243042 templatefilters: allow declaration of input data type
Yuya Nishihara <yuya@tcha.org>
parents: 36922
diff changeset
411 def _extrasetup(self, name, func, intype=None):
54355c243042 templatefilters: allow declaration of input data type
Yuya Nishihara <yuya@tcha.org>
parents: 36922
diff changeset
412 func._intype = intype
54355c243042 templatefilters: allow declaration of input data type
Yuya Nishihara <yuya@tcha.org>
parents: 36922
diff changeset
413
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
414
28695
cc103bd0dbf9 registrar: add templatefunc to mark a function as template function (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28692
diff changeset
415 class templatefunc(_templateregistrarbase):
cc103bd0dbf9 registrar: add templatefunc to mark a function as template function (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28692
diff changeset
416 """Decorator to register template function
cc103bd0dbf9 registrar: add templatefunc to mark a function as template function (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28692
diff changeset
417
cc103bd0dbf9 registrar: add templatefunc to mark a function as template function (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28692
diff changeset
418 Usage::
cc103bd0dbf9 registrar: add templatefunc to mark a function as template function (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28692
diff changeset
419
cc103bd0dbf9 registrar: add templatefunc to mark a function as template function (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28692
diff changeset
420 templatefunc = registrar.templatefunc()
cc103bd0dbf9 registrar: add templatefunc to mark a function as template function (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28692
diff changeset
421
46000
c1bb02738f96 registrar: clarify the documentation about some byte strings being required
Matt Harbison <matt_harbison@yahoo.com>
parents: 45942
diff changeset
422 @templatefunc(b'myfunc(arg1, arg2[, arg3])', argspec=b'arg1 arg2 arg3',
c1bb02738f96 registrar: clarify the documentation about some byte strings being required
Matt Harbison <matt_harbison@yahoo.com>
parents: 45942
diff changeset
423 requires={b'ctx'})
28695
cc103bd0dbf9 registrar: add templatefunc to mark a function as template function (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28692
diff changeset
424 def myfuncfunc(context, mapping, args):
cc103bd0dbf9 registrar: add templatefunc to mark a function as template function (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28692
diff changeset
425 '''Explanation of this template function ....
cc103bd0dbf9 registrar: add templatefunc to mark a function as template function (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28692
diff changeset
426 '''
cc103bd0dbf9 registrar: add templatefunc to mark a function as template function (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28692
diff changeset
427 pass
cc103bd0dbf9 registrar: add templatefunc to mark a function as template function (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28692
diff changeset
428
cc103bd0dbf9 registrar: add templatefunc to mark a function as template function (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28692
diff changeset
429 The first string argument is used also in online help.
cc103bd0dbf9 registrar: add templatefunc to mark a function as template function (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28692
diff changeset
430
31886
bdda942f4b9c templater: add support for keyword arguments
Yuya Nishihara <yuya@tcha.org>
parents: 31820
diff changeset
431 If optional 'argspec' is defined, the function will receive 'args' as
bdda942f4b9c templater: add support for keyword arguments
Yuya Nishihara <yuya@tcha.org>
parents: 31820
diff changeset
432 a dict of named arguments. Otherwise 'args' is a list of positional
bdda942f4b9c templater: add support for keyword arguments
Yuya Nishihara <yuya@tcha.org>
parents: 31820
diff changeset
433 arguments.
bdda942f4b9c templater: add support for keyword arguments
Yuya Nishihara <yuya@tcha.org>
parents: 31820
diff changeset
434
38428
aa98392eb5b0 templatefuncs: declare resource requirements for future use
Yuya Nishihara <yuya@tcha.org>
parents: 37716
diff changeset
435 Optional argument 'requires' should be a collection of resource names
aa98392eb5b0 templatefuncs: declare resource requirements for future use
Yuya Nishihara <yuya@tcha.org>
parents: 37716
diff changeset
436 which the template function depends on.
aa98392eb5b0 templatefuncs: declare resource requirements for future use
Yuya Nishihara <yuya@tcha.org>
parents: 37716
diff changeset
437
28695
cc103bd0dbf9 registrar: add templatefunc to mark a function as template function (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28692
diff changeset
438 'templatefunc' instance in example above can be used to
cc103bd0dbf9 registrar: add templatefunc to mark a function as template function (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28692
diff changeset
439 decorate multiple functions.
cc103bd0dbf9 registrar: add templatefunc to mark a function as template function (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28692
diff changeset
440
cc103bd0dbf9 registrar: add templatefunc to mark a function as template function (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28692
diff changeset
441 Decorated functions are registered automatically at loading
cc103bd0dbf9 registrar: add templatefunc to mark a function as template function (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28692
diff changeset
442 extension, if an instance named as 'templatefunc' is used for
cc103bd0dbf9 registrar: add templatefunc to mark a function as template function (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28692
diff changeset
443 decorating in extension.
cc103bd0dbf9 registrar: add templatefunc to mark a function as template function (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28692
diff changeset
444
36922
521f6c7e1756 templater: split template functions to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36445
diff changeset
445 Otherwise, explicit 'templatefuncs.loadfunction()' is needed.
28695
cc103bd0dbf9 registrar: add templatefunc to mark a function as template function (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28692
diff changeset
446 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
447
28695
cc103bd0dbf9 registrar: add templatefunc to mark a function as template function (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28692
diff changeset
448 _getname = _funcregistrarbase._parsefuncdecl
31886
bdda942f4b9c templater: add support for keyword arguments
Yuya Nishihara <yuya@tcha.org>
parents: 31820
diff changeset
449
38428
aa98392eb5b0 templatefuncs: declare resource requirements for future use
Yuya Nishihara <yuya@tcha.org>
parents: 37716
diff changeset
450 def _extrasetup(self, name, func, argspec=None, requires=()):
31886
bdda942f4b9c templater: add support for keyword arguments
Yuya Nishihara <yuya@tcha.org>
parents: 31820
diff changeset
451 func._argspec = argspec
38428
aa98392eb5b0 templatefuncs: declare resource requirements for future use
Yuya Nishihara <yuya@tcha.org>
parents: 37716
diff changeset
452 func._requires = requires
33699
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
453
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
454
33699
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
455 class internalmerge(_funcregistrarbase):
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
456 """Decorator to register in-process merge tool
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
457
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
458 Usage::
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
459
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
460 internalmerge = registrar.internalmerge()
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
461
46000
c1bb02738f96 registrar: clarify the documentation about some byte strings being required
Matt Harbison <matt_harbison@yahoo.com>
parents: 45942
diff changeset
462 @internalmerge(b'mymerge', internalmerge.mergeonly,
39122
5d3b58472660 filemerge: set actual capabilities of internal merge tools
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 38930
diff changeset
463 onfailure=None, precheck=None,
5d3b58472660 filemerge: set actual capabilities of internal merge tools
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 38930
diff changeset
464 binary=False, symlink=False):
33699
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
465 def mymergefunc(repo, mynode, orig, fcd, fco, fca,
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
466 toolconf, files, labels=None):
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
467 '''Explanation of this internal merge tool ....
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
468 '''
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
469 return 1, False # means "conflicted", "no deletion needed"
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
470
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
471 The first string argument is used to compose actual merge tool name,
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
472 ":name" and "internal:name" (the latter is historical one).
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
473
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
474 The second argument is one of merge types below:
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
475
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
476 ========== ======== ======== =========
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
477 merge type precheck premerge fullmerge
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
478 ========== ======== ======== =========
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
479 nomerge x x x
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
480 mergeonly o x o
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
481 fullmerge o o o
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
482 ========== ======== ======== =========
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
483
34436
c1fe66e89f57 registrar: fixing typo in comment
Saurabh Singh <singhsrb@fb.com>
parents: 34381
diff changeset
484 Optional argument 'onfailure' is the format of warning message
33699
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
485 to be used at failure of merging (target filename is specified
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
486 at formatting). Or, None or so, if warning message should be
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
487 suppressed.
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
488
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
489 Optional argument 'precheck' is the function to be used
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
490 before actual invocation of internal merge tool itself.
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
491 It takes as same arguments as internal merge tool does, other than
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
492 'files' and 'labels'. If it returns false value, merging is aborted
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
493 immediately (and file is marked as "unresolved").
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
494
39122
5d3b58472660 filemerge: set actual capabilities of internal merge tools
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 38930
diff changeset
495 Optional argument 'binary' is a binary files capability of internal
5d3b58472660 filemerge: set actual capabilities of internal merge tools
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 38930
diff changeset
496 merge tool. 'nomerge' merge type implies binary=True.
5d3b58472660 filemerge: set actual capabilities of internal merge tools
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 38930
diff changeset
497
5d3b58472660 filemerge: set actual capabilities of internal merge tools
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 38930
diff changeset
498 Optional argument 'symlink' is a symlinks capability of inetrnal
5d3b58472660 filemerge: set actual capabilities of internal merge tools
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 38930
diff changeset
499 merge function. 'nomerge' merge type implies symlink=True.
5d3b58472660 filemerge: set actual capabilities of internal merge tools
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 38930
diff changeset
500
33699
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
501 'internalmerge' instance in example above can be used to
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
502 decorate multiple functions.
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
503
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
504 Decorated functions are registered automatically at loading
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
505 extension, if an instance named as 'internalmerge' is used for
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
506 decorating in extension.
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
507
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
508 Otherwise, explicit 'filemerge.loadinternalmerge()' is needed.
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
509 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
510
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
511 _docformat = b"``:%s``\n %s"
33699
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
512
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
513 # merge type definitions:
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
514 nomerge = None
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
515 mergeonly = b'mergeonly' # just the full merge, no premerge
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
516 fullmerge = b'fullmerge' # both premerge and merge
33699
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
517
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
518 def _extrasetup(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
519 self,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
520 name,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
521 func,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
522 mergetype,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
523 onfailure=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
524 precheck=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
525 binary=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42596
diff changeset
526 symlink=False,
51297
4d12ffde8377 pytype: ignore some signature mismatch in registrar
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50989
diff changeset
527 ): # pytype: disable=signature-mismatch
33699
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
528 func.mergetype = mergetype
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
529 func.onfailure = onfailure
50c44dee741a filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 33132
diff changeset
530 func.precheck = precheck
39122
5d3b58472660 filemerge: set actual capabilities of internal merge tools
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 38930
diff changeset
531
5d3b58472660 filemerge: set actual capabilities of internal merge tools
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 38930
diff changeset
532 binarycap = binary or mergetype == self.nomerge
5d3b58472660 filemerge: set actual capabilities of internal merge tools
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 38930
diff changeset
533 symlinkcap = symlink or mergetype == self.nomerge
5d3b58472660 filemerge: set actual capabilities of internal merge tools
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 38930
diff changeset
534
5d3b58472660 filemerge: set actual capabilities of internal merge tools
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 38930
diff changeset
535 # actual capabilities, which this internal merge tool has
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
536 func.capabilities = {b"binary": binarycap, b"symlink": symlinkcap}
50989
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
537
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
538
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
539 class verify_check(_funcregistrarbase):
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
540 """Decorator to register a check for admin::verify
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
541
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
542 options is a list of (name, default value, help) to be passed to the check
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
543 """
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
544
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
545 def __init__(self, table=None, alias_table=None):
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
546 super().__init__(table)
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
547 if alias_table is None:
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
548 self._alias_table = {}
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
549 else:
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
550 self._alias_table = alias_table
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
551
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
552 def _extrasetup(
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
553 self,
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
554 name,
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
555 func,
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
556 alias: Optional[bytes] = None,
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
557 options: Optional[List[Tuple[bytes, Any, bytes]]] = None,
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
558 ):
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
559 func.alias = alias
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
560 func.options = options
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
561
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
562 if alias:
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50928
diff changeset
563 self._alias_table[alias] = name