Mercurial > hg
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 |
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 |