mercurial/admin_commands.py
author Pierre-Yves David <pierre-yves.david@octobus.net>
Tue, 20 Feb 2024 14:21:18 +0100
changeset 51399 8f2ea3fa50fd
parent 50997 752c5a5b73c6
child 51454 d4095f7b000a
permissions -rw-r--r--
phases: explicitly filter stripped revision at strip time Explicit is better than implicit. The current logic is bit subtle and fragile. It also get in the way of using something else than node-id as internal storage. We replace it with a more explicit filtering while striping.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50995
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
50997
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
     8
from .i18n import _
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
     9
from .admin import verify
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    10
from . import error, registrar, transaction
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    11
50995
727428c7e1fc commands: add admin namespace
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    12
727428c7e1fc commands: add admin namespace
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    13
table = {}
727428c7e1fc commands: add admin namespace
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    14
command = registrar.command(table)
50997
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    15
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    16
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    17
@command(
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    18
    b'admin::verify',
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    19
    [
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    20
        (b'c', b'check', [], _(b'add a check'), _(b'CHECK')),
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    21
        (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: 50995
diff changeset
    22
    ],
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    23
    helpcategory=command.CATEGORY_MAINTENANCE,
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    24
)
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    25
def admin_verify(ui, repo, **opts):
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    26
    """verify the integrity of the repository
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    27
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    28
    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: 50995
diff changeset
    29
    verification process and better error reporting.
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    30
    """
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    31
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    32
    if not repo.url().startswith(b'file:'):
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    33
        raise error.Abort(_(b"cannot verify bundle or remote repos"))
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    34
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    35
    if transaction.has_abandoned_transaction(repo):
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    36
        ui.warn(_(b"abandoned transaction found - run hg recover\n"))
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    37
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    38
    checks = opts.get("check", [])
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    39
    options = opts.get("option", [])
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    40
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    41
    funcs = verify.get_checks(repo, ui, names=checks, options=options)
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    42
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    43
    ui.status(_(b"running %d checks\n") % len(funcs))
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    44
    # 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: 50995
diff changeset
    45
    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: 50995
diff changeset
    46
        ui.status(_(b"running %s\n") % name)
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    47
        errors = func()
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    48
        if errors:
752c5a5b73c6 admin-command: add verify command
Raphaël Gomès <rgomes@octobus.net>
parents: 50995
diff changeset
    49
            ui.warn(_(b"found %d errors\n") % len(errors))