| # 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 mozbuild.base import ( |
| MachCommandBase, |
| ) |
| |
| import mozpack.path as mozpath |
| |
| |
| MERGE_HELP = '''Directory to merge to. Will be removed to before running |
| the comparison. Default: $(OBJDIR)/($MOZ_BUILD_APP)/locales/merge-$(AB_CD) |
| '''.lstrip() |
| |
| |
| @CommandProvider |
| class CompareLocales(MachCommandBase): |
| """Run compare-locales.""" |
| |
| @Command('compare-locales', category='testing', |
| description='Run source checks on a localization.') |
| @CommandArgument('--l10n-ini', |
| help='l10n.ini describing the app. ' + |
| 'Default: $(MOZ_BUILD_APP)/locales/l10n.ini') |
| @CommandArgument('--l10n-base', |
| help='Directory with the localizations. ' + |
| 'Default: $(L10NBASEDIR)') |
| @CommandArgument('--merge-dir', |
| help=MERGE_HELP) |
| @CommandArgument('locales', nargs='+', metavar='ab_CD', |
| help='Locale codes to compare') |
| def compare(self, l10n_ini=None, l10n_base=None, merge_dir=None, |
| locales=None): |
| from compare_locales.paths import EnumerateApp |
| from compare_locales.compare import compareApp |
| |
| # check if we're configured and use defaults from there |
| # otherwise, error early |
| try: |
| self.substs # explicitly check |
| if not l10n_ini: |
| l10n_ini = mozpath.join( |
| self.topsrcdir, |
| self.substs['MOZ_BUILD_APP'], |
| 'locales', 'l10n.ini' |
| ) |
| if not l10n_base: |
| l10n_base = mozpath.join( |
| self.topsrcdir, |
| self.substs['L10NBASEDIR'] |
| ) |
| except Exception: |
| if not l10n_ini or not l10n_base: |
| print('Specify --l10n-ini and --l10n-base or run configure.') |
| return 1 |
| |
| if not merge_dir: |
| try: |
| # self.substs is raising an Exception if we're not configured |
| # don't merge if we're not |
| merge_dir = mozpath.join( |
| self.topobjdir, |
| self.substs['MOZ_BUILD_APP'], |
| 'locales', 'merge-{ab_CD}' |
| ) |
| except Exception: |
| pass |
| |
| app = EnumerateApp(l10n_ini, l10n_base, locales) |
| observer = compareApp(app, merge_stage=merge_dir, |
| clobber=True) |
| print(observer.serialize().encode('utf-8', 'replace')) |