--- a/mercurial/admin_commands.py Wed Sep 13 12:25:51 2023 +0200
+++ b/mercurial/admin_commands.py Wed Jan 25 15:34:27 2023 +0100
@@ -5,7 +5,45 @@
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
-from . import registrar
+from .i18n import _
+from .admin import verify
+from . import error, registrar, transaction
+
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") % len(errors))