Mercurial > hg
view mercurial/admin_commands.py @ 51626:865efc020c33 default tip
dirstate: remove the python-side whitelist of allowed matchers
This whitelist is too permissive because it allows matchers that contain
disallowed ones deep inside, for example through `intersectionmatcher`.
It is also too restrictive because it doesn't pass through
some of the matchers we support, such as `patternmatcher`.
It's also unnecessary because unsupported matchers raise
`FallbackError` and we fall back anyway.
Making this change makes more of the tests use rust code path,
and therefore subtly change behavior. For example, rust status
in largefiles repos seems to have strange behavior.
author | Arseniy Alekseyev <aalekseyev@janestreet.com> |
---|---|
date | Fri, 26 Apr 2024 19:10:35 +0100 |
parents | a93e60ebea09 |
children |
line wrap: on
line source
# admin_commands.py - command processing for admin* commands # # Copyright 2022 Mercurial Developers # # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. from .i18n import _ from .admin import chainsaw, verify from . import error, registrar, transaction table = {} table.update(chainsaw.command._table) command = registrar.command(table) @command( b'admin::verify', [ (b'c', b'check', [], _(b'add a check'), _(b'CHECK')), (b'o', b'option', [], _(b'pass an option to a check'), _(b'OPTION')), ], helpcategory=command.CATEGORY_MAINTENANCE, ) def admin_verify(ui, repo, **opts): """verify the integrity of the repository Alternative UI to `hg verify` with a lot more control over the verification process and better error reporting. """ if not repo.url().startswith(b'file:'): raise error.Abort(_(b"cannot verify bundle or remote repos")) if transaction.has_abandoned_transaction(repo): ui.warn(_(b"abandoned transaction found - run hg recover\n")) checks = opts.get("check", []) options = opts.get("option", []) funcs = verify.get_checks(repo, ui, names=checks, options=options) ui.status(_(b"running %d checks\n") % len(funcs)) # Done in two times so the execution is separated from the resolving step for name, func in sorted(funcs.items(), key=lambda x: x[0]): ui.status(_(b"running %s\n") % name) errors = func() if errors: ui.warn(_(b"found %d errors\n") % errors)