Mercurial > public > mercurial-scm > hg-stable
annotate mercurial/admin/verify.py @ 51902:1c5810ce737e
typing: add `from __future__ import annotations` to remaining source files
Most of these look newer than when the original imports referenced in the
previous commit were dropped, so these weren't covered by the backout. These
were found with:
hg files mercurial hgext hgext3rd -I '**.py' -X '**/thirdparty' \
| xargs grep -L 'from __future__ import annotations'
All of the `__init__.py` files that finds are empty, so those were ignored and
the rest manually edited.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Thu, 12 Sep 2024 16:27:58 -0400 |
parents | 2a27b921cd91 |
children | dc36535a5edc |
rev | line source |
---|---|
50997
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
1 # admin/verify.py - better repository integrity checking for Mercurial |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
2 # |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
3 # Copyright 2023 Octobus <contact@octobus.net> |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
4 # |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
7 |
51902
1c5810ce737e
typing: add `from __future__ import annotations` to remaining source files
Matt Harbison <matt_harbison@yahoo.com>
parents:
51490
diff
changeset
|
8 from __future__ import annotations |
1c5810ce737e
typing: add `from __future__ import annotations` to remaining source files
Matt Harbison <matt_harbison@yahoo.com>
parents:
51490
diff
changeset
|
9 |
50997
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
10 import collections |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
11 import copy |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
12 import functools |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
13 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
14 from ..i18n import _ |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
15 from .. import error, pycompat, registrar, requirements |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
16 from ..utils import stringutil |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
17 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
18 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
19 verify_table = {} |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
20 verify_alias_table = {} |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
21 check = registrar.verify_check(verify_table, verify_alias_table) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
22 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
23 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
24 # Use this to declare options/aliases in the middle of the hierarchy. |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
25 # Checks like these are not run themselves and cannot have a body. |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
26 # For an example, see the `revlogs` check. |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
27 def noop_func(*args, **kwargs): |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
28 return |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
29 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
30 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
31 @check(b"working-copy.dirstate", alias=b"dirstate") |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
32 def check_dirstate(ui, repo, **options): |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
33 ui.status(_(b"checking dirstate\n")) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
34 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
35 parent1, parent2 = repo.dirstate.parents() |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
36 m1 = repo[parent1].manifest() |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
37 m2 = repo[parent2].manifest() |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
38 errors = 0 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
39 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
40 is_narrow = requirements.NARROW_REQUIREMENT in repo.requirements |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
41 narrow_matcher = repo.narrowmatch() if is_narrow else None |
51489
dcb00d5c397a
admin-verify: pass p1 down to the dirstate function
Rapha?l Gom?s <rgomes@octobus.net>
parents:
50997
diff
changeset
|
42 for err in repo.dirstate.verify(m1, m2, parent1, narrow_matcher): |
51490
2a27b921cd91
admin-verify: fix error message handling
Rapha?l Gom?s <rgomes@octobus.net>
parents:
51489
diff
changeset
|
43 ui.warn(err) |
50997
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
44 errors += 1 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
45 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
46 return errors |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
47 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
48 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
49 # Tree of all checks and their associated function |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
50 pyramid = {} |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
51 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
52 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
53 def build_pyramid(table, full_pyramid): |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
54 """Create a pyramid of checks of the registered checks. |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
55 It is a name-based hierarchy that can be arbitrarily nested.""" |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
56 for entry, func in sorted(table.items(), key=lambda x: x[0], reverse=True): |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
57 cursor = full_pyramid |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
58 levels = entry.split(b".") |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
59 for level in levels[:-1]: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
60 current_node = cursor.setdefault(level, {}) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
61 cursor = current_node |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
62 if cursor.get(levels[-1]) is None: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
63 cursor[levels[-1]] = (entry, func) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
64 elif func is not noop_func: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
65 m = b"intermediate checks need to use `verify.noop_func`" |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
66 raise error.ProgrammingError(m) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
67 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
68 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
69 def find_checks(name, table=None, alias_table=None, full_pyramid=None): |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
70 """Find all checks for a given name and returns a dict of |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
71 (qualified_check_name, check_function) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
72 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
73 # Examples |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
74 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
75 Using a full qualified name: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
76 "working-copy.dirstate" -> { |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
77 "working-copy.dirstate": CF, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
78 } |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
79 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
80 Using a *prefix* of a qualified name: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
81 "store.revlogs" -> { |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
82 "store.revlogs.changelog": CF, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
83 "store.revlogs.manifestlog": CF, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
84 "store.revlogs.filelog": CF, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
85 } |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
86 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
87 Using a defined alias: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
88 "revlogs" -> { |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
89 "store.revlogs.changelog": CF, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
90 "store.revlogs.manifestlog": CF, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
91 "store.revlogs.filelog": CF, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
92 } |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
93 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
94 Using something that is none of the above will be an error. |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
95 """ |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
96 if table is None: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
97 table = verify_table |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
98 if alias_table is None: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
99 alias_table = verify_alias_table |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
100 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
101 if name == b"full": |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
102 return table |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
103 checks = {} |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
104 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
105 # is it a full name? |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
106 check = table.get(name) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
107 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
108 if check is None: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
109 # is it an alias? |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
110 qualified_name = alias_table.get(name) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
111 if qualified_name is not None: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
112 name = qualified_name |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
113 check = table.get(name) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
114 else: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
115 split = name.split(b".", 1) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
116 if len(split) == 2: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
117 # split[0] can be an alias |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
118 qualified_name = alias_table.get(split[0]) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
119 if qualified_name is not None: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
120 name = b"%s.%s" % (qualified_name, split[1]) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
121 check = table.get(name) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
122 else: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
123 qualified_name = name |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
124 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
125 # Maybe it's a subtree in the check hierarchy that does not |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
126 # have an explicit alias. |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
127 levels = name.split(b".") |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
128 if full_pyramid is not None: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
129 if not full_pyramid: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
130 build_pyramid(table, full_pyramid) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
131 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
132 pyramid.clear() |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
133 pyramid.update(full_pyramid.items()) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
134 else: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
135 build_pyramid(table, pyramid) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
136 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
137 subtree = pyramid |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
138 # Find subtree |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
139 for level in levels: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
140 subtree = subtree.get(level) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
141 if subtree is None: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
142 hint = error.getsimilar(list(alias_table) + list(table), name) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
143 hint = error.similarity_hint(hint) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
144 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
145 raise error.InputError(_(b"unknown check %s" % name), hint=hint) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
146 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
147 # Get all checks in that subtree |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
148 if isinstance(subtree, dict): |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
149 stack = list(subtree.items()) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
150 while stack: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
151 current_name, entry = stack.pop() |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
152 if isinstance(entry, dict): |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
153 stack.extend(entry.items()) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
154 else: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
155 # (qualified_name, func) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
156 checks[entry[0]] = entry[1] |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
157 else: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
158 checks[name] = check |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
159 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
160 return checks |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
161 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
162 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
163 def pass_options( |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
164 ui, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
165 checks, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
166 options, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
167 table=None, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
168 alias_table=None, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
169 full_pyramid=None, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
170 ): |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
171 """Given a dict of checks (fully qualified name to function), and a list |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
172 of options as given by the user, pass each option down to the right check |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
173 function.""" |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
174 ui.debug(b"passing options to check functions\n") |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
175 to_modify = collections.defaultdict(dict) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
176 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
177 if not checks: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
178 raise error.Error(_(b"`checks` required")) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
179 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
180 for option in sorted(options): |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
181 split = option.split(b":") |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
182 hint = _( |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
183 b"syntax is 'check:option=value', " |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
184 b"eg. revlogs.changelog:copies=yes" |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
185 ) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
186 option_error = error.InputError( |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
187 _(b"invalid option '%s'") % option, hint=hint |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
188 ) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
189 if len(split) != 2: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
190 raise option_error |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
191 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
192 check_name, option_value = split |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
193 if not option_value: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
194 raise option_error |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
195 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
196 split = option_value.split(b"=") |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
197 if len(split) != 2: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
198 raise option_error |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
199 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
200 option_name, value = split |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
201 if not value: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
202 raise option_error |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
203 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
204 path = b"%s:%s" % (check_name, option_name) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
205 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
206 matching_checks = find_checks( |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
207 check_name, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
208 table=table, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
209 alias_table=alias_table, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
210 full_pyramid=full_pyramid, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
211 ) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
212 for name in matching_checks: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
213 check = checks.get(name) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
214 if check is None: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
215 msg = _(b"specified option '%s' for unselected check '%s'\n") |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
216 raise error.InputError(msg % (name, option_name)) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
217 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
218 assert hasattr(check, "func") # help Pytype |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
219 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
220 if not hasattr(check.func, "options"): |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
221 raise error.InputError( |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
222 _(b"check '%s' has no option '%s'") % (name, option_name) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
223 ) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
224 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
225 try: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
226 matching_option = next( |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
227 (o for o in check.func.options if o[0] == option_name) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
228 ) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
229 except StopIteration: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
230 raise error.InputError( |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
231 _(b"check '%s' has no option '%s'") % (name, option_name) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
232 ) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
233 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
234 # transform the argument from cli string to the expected Python type |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
235 _name, typ, _docstring = matching_option |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
236 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
237 as_typed = None |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
238 if isinstance(typ, bool): |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
239 as_bool = stringutil.parsebool(value) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
240 if as_bool is None: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
241 raise error.InputError( |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
242 _(b"'%s' is not a boolean ('%s')") % (path, value) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
243 ) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
244 as_typed = as_bool |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
245 elif isinstance(typ, list): |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
246 as_list = stringutil.parselist(value) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
247 if as_list is None: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
248 raise error.InputError( |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
249 _(b"'%s' is not a list ('%s')") % (path, value) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
250 ) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
251 as_typed = as_list |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
252 else: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
253 raise error.ProgrammingError(b"unsupported type %s", type(typ)) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
254 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
255 if option_name in to_modify[name]: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
256 raise error.InputError( |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
257 _(b"duplicated option '%s' for '%s'") % (option_name, name) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
258 ) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
259 else: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
260 assert as_typed is not None |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
261 to_modify[name][option_name] = as_typed |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
262 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
263 # Manage case where a check is set but without command line options |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
264 # it will later be set with default check options values |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
265 for name, f in checks.items(): |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
266 if name not in to_modify: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
267 to_modify[name] = {} |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
268 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
269 # Merge default options with command line options |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
270 for check_name, cmd_options in to_modify.items(): |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
271 check = checks.get(check_name) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
272 func = checks[check_name] |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
273 merged_options = {} |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
274 # help Pytype |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
275 assert check is not None |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
276 assert check.func is not None |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
277 assert hasattr(check.func, "options") |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
278 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
279 if check.func.options: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
280 # copy the default value in case it's mutable (list, etc.) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
281 merged_options = { |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
282 o[0]: copy.deepcopy(o[1]) for o in check.func.options |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
283 } |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
284 if cmd_options: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
285 for k, v in cmd_options.items(): |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
286 merged_options[k] = v |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
287 options = pycompat.strkwargs(merged_options) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
288 checks[check_name] = functools.partial(func, **options) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
289 ui.debug(b"merged options for '%s': '%r'\n" % (check_name, options)) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
290 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
291 return checks |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
292 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
293 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
294 def get_checks( |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
295 repo, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
296 ui, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
297 names=None, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
298 options=None, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
299 table=None, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
300 alias_table=None, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
301 full_pyramid=None, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
302 ): |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
303 """Given a list of function names and optionally a list of |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
304 options, return matched checks with merged options (command line options |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
305 values take precedence on default ones) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
306 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
307 It runs find checks, then resolve options and returns a dict of matched |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
308 functions with resolved options. |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
309 """ |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
310 funcs = {} |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
311 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
312 if names is None: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
313 names = [] |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
314 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
315 if options is None: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
316 options = [] |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
317 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
318 # find checks |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
319 for name in names: |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
320 matched = find_checks( |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
321 name, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
322 table=table, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
323 alias_table=alias_table, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
324 full_pyramid=full_pyramid, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
325 ) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
326 matched_names = b", ".join(matched) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
327 ui.debug(b"found checks '%s' for name '%s'\n" % (matched_names, name)) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
328 funcs.update(matched) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
329 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
330 funcs = {n: functools.partial(f, ui, repo) for n, f in funcs.items()} |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
331 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
332 # resolve options |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
333 checks = pass_options( |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
334 ui, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
335 funcs, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
336 options, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
337 table=table, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
338 alias_table=alias_table, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
339 full_pyramid=full_pyramid, |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
340 ) |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
341 |
752c5a5b73c6
admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff
changeset
|
342 return checks |