mercurial/admin_commands.py
author Pierre-Yves David <pierre-yves.david@octobus.net>
Tue, 11 Mar 2025 02:29:42 +0100
branchstable
changeset 53042 cdd7bf612c7b
parent 51860 1c5810ce737e
permissions -rw-r--r--
bundle-spec: properly format boolean parameter (issue6960) This was breaking automatic clone bundle generation. This changeset fixes it and add a test to catch it in the future.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50984
727428c7e1fc commands: add admin namespace
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
     1
# admin_commands.py - command processing for admin* commands
727428c7e1fc commands: add admin namespace
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
     2
#
727428c7e1fc commands: add admin namespace
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
     3
# Copyright 2022 Mercurial Developers
727428c7e1fc commands: add admin namespace
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
     4
#
727428c7e1fc commands: add admin namespace
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
     5
# This software may be used and distributed according to the terms of the
727428c7e1fc commands: add admin namespace
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
     6
# GNU General Public License version 2 or any later version.
727428c7e1fc commands: add admin namespace
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
     7
51860
1c5810ce737e typing: add `from __future__ import annotations` to remaining source files
Matt Harbison <matt_harbison@yahoo.com>
parents: 51612
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: 51612
diff changeset
     9
50986
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    10
from .i18n import _
51500
d4095f7b000a admin-commands: move the chainsaw extension to the admin commands module
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50986
diff changeset
    11
from .admin import chainsaw, verify
50986
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    12
from . import error, registrar, transaction
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    13
50984
727428c7e1fc commands: add admin namespace
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    14
727428c7e1fc commands: add admin namespace
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    15
table = {}
51500
d4095f7b000a admin-commands: move the chainsaw extension to the admin commands module
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50986
diff changeset
    16
table.update(chainsaw.command._table)
50984
727428c7e1fc commands: add admin namespace
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    17
command = registrar.command(table)
50986
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    18
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    19
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    20
@command(
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    21
    b'admin::verify',
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    22
    [
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    23
        (b'c', b'check', [], _(b'add a check'), _(b'CHECK')),
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    24
        (b'o', b'option', [], _(b'pass an option to a check'), _(b'OPTION')),
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    25
    ],
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    26
    helpcategory=command.CATEGORY_MAINTENANCE,
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    27
)
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    28
def admin_verify(ui, repo, **opts):
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    29
    """verify the integrity of the repository
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    30
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    31
    Alternative UI to `hg verify` with a lot more control over the
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    32
    verification process and better error reporting.
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    33
    """
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    34
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    35
    if not repo.url().startswith(b'file:'):
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    36
        raise error.Abort(_(b"cannot verify bundle or remote repos"))
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    37
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    38
    if transaction.has_abandoned_transaction(repo):
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    39
        ui.warn(_(b"abandoned transaction found - run hg recover\n"))
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    40
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    41
    checks = opts.get("check", [])
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    42
    options = opts.get("option", [])
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    43
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    44
    funcs = verify.get_checks(repo, ui, names=checks, options=options)
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    45
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    46
    ui.status(_(b"running %d checks\n") % len(funcs))
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    47
    # Done in two times so the execution is separated from the resolving step
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    48
    for name, func in sorted(funcs.items(), key=lambda x: x[0]):
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    49
        ui.status(_(b"running %s\n") % name)
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    50
        errors = func()
752c5a5b73c6 admin-command: add verify command
Rapha?l Gom?s <rgomes@octobus.net>
parents: 50984
diff changeset
    51
        if errors:
51612
a93e60ebea09 admin-verify: expect a number of errors to be returned
Rapha?l Gom?s <rgomes@octobus.net>
parents: 51500
diff changeset
    52
            ui.warn(_(b"found %d errors\n") % errors)