summaryrefslogtreecommitdiffstats
path: root/tools/compare-locales/mach_commands.py
blob: a8c1c901548ae95b54e84daf165a80ad5bbacf33 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this,
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

from __future__ import absolute_import, print_function, unicode_literals

from mach.decorators import (
    CommandArgument,
    CommandProvider,
    Command,
)
from mach.base import FailedCommandError
from mozbuild.base import MachCommandBase


@CommandProvider
class CompareLocales(MachCommandBase):
    """Run compare-locales."""

    @Command(
        "compare-locales",
        category="build",
        description="Run source checks on a localization.",
    )
    @CommandArgument(
        "config_paths",
        metavar="l10n.toml",
        nargs="+",
        help="TOML or INI file for the project",
    )
    @CommandArgument(
        "l10n_base_dir",
        metavar="l10n-base-dir",
        help="Parent directory of localizations",
    )
    @CommandArgument(
        "locales",
        nargs="*",
        metavar="locale-code",
        help="Locale code and top-level directory of " "each localization",
    )
    @CommandArgument(
        "-q",
        "--quiet",
        action="count",
        default=0,
        help="""Show less data.
Specified once, don't show obsolete entities. Specified twice, also hide
missing entities. Specify thrice to exclude warnings and four times to
just show stats""",
    )
    @CommandArgument(
        "-m", "--merge", help="""Use this directory to stage merged files"""
    )
    @CommandArgument(
        "--validate", action="store_true", help="Run compare-locales against reference"
    )
    @CommandArgument(
        "--json",
        help="""Serialize to JSON. Value is the name of
the output file, pass "-" to serialize to stdout and hide the default output.
""",
    )
    @CommandArgument(
        "-D",
        action="append",
        metavar="var=value",
        default=[],
        dest="defines",
        help="Overwrite variables in TOML files",
    )
    @CommandArgument(
        "--full", action="store_true", help="Compare projects that are disabled"
    )
    @CommandArgument(
        "--return-zero", action="store_true", help="Return 0 regardless of l10n status"
    )
    def compare(self, **kwargs):
        from compare_locales.commands import CompareLocales

        class ErrorHelper(object):
            """Dummy ArgumentParser to marshall compare-locales
            commandline errors to mach exceptions.
            """

            def error(self, msg):
                raise FailedCommandError(msg)

            def exit(self, message=None, status=0):
                raise FailedCommandError(message, exit_code=status)

        cmd = CompareLocales()
        cmd.parser = ErrorHelper()
        return cmd.handle(**kwargs)