diff options
| author | QMK Bot <[email protected]> | 2023-03-16 20:36:32 +0000 | 
|---|---|---|
| committer | QMK Bot <[email protected]> | 2023-03-16 20:36:32 +0000 | 
| commit | 79ae14ae0accfdb7496821ed61adbcd4c99fe28a (patch) | |
| tree | 603b6d539b565205d569abf40118e3f339dc4c3f /lib/python/qmk/cli/mass_compile.py | |
| parent | 23313c59763a65042f711606a67ae9262cb584ca (diff) | |
| parent | 1b3f7fcf7d3d441623e065c0be7821c5c5d87c75 (diff) | |
| download | qmk_firmware-79ae14ae0accfdb7496821ed61adbcd4c99fe28a.tar.gz qmk_firmware-79ae14ae0accfdb7496821ed61adbcd4c99fe28a.zip  | |
Merge remote-tracking branch 'origin/master' into develop
Diffstat (limited to 'lib/python/qmk/cli/mass_compile.py')
| -rwxr-xr-x | lib/python/qmk/cli/mass_compile.py | 91 | 
1 files changed, 2 insertions, 89 deletions
diff --git a/lib/python/qmk/cli/mass_compile.py b/lib/python/qmk/cli/mass_compile.py index 810350b954..941e6aa411 100755 --- a/lib/python/qmk/cli/mass_compile.py +++ b/lib/python/qmk/cli/mass_compile.py @@ -2,52 +2,14 @@  This will compile everything in parallel, for testing purposes.  """ -import fnmatch -import logging -import multiprocessing  import os -import re  from pathlib import Path  from subprocess import DEVNULL -from dotty_dict import dotty  from milc import cli  from qmk.constants import QMK_FIRMWARE  from qmk.commands import _find_make, get_make_parallel_args -from qmk.info import keymap_json -import qmk.keyboard -import qmk.keymap - - -def _set_log_level(level): -    cli.acquire_lock() -    old = cli.log_level -    cli.log_level = level -    cli.log.setLevel(level) -    logging.root.setLevel(level) -    cli.release_lock() -    return old - - -def _all_keymaps(keyboard): -    old = _set_log_level(logging.CRITICAL) -    keymaps = qmk.keymap.list_keymaps(keyboard) -    _set_log_level(old) -    return (keyboard, keymaps) - - -def _keymap_exists(keyboard, keymap): -    old = _set_log_level(logging.CRITICAL) -    ret = keyboard if qmk.keymap.locate_keymap(keyboard, keymap) is not None else None -    _set_log_level(old) -    return ret - - -def _load_keymap_info(keyboard, keymap): -    old = _set_log_level(logging.CRITICAL) -    ret = (keyboard, keymap, keymap_json(keyboard, keymap)) -    _set_log_level(old) -    return ret +from qmk.search import search_keymap_targets  @cli.argument('-t', '--no-temp', arg_only=True, action='store_true', help="Remove temporary files during build.") @@ -75,56 +37,7 @@ def mass_compile(cli):      builddir = Path(QMK_FIRMWARE) / '.build'      makefile = builddir / 'parallel_kb_builds.mk' -    targets = [] - -    with multiprocessing.Pool() as pool: -        cli.log.info(f'Retrieving list of keyboards with keymap "{cli.args.keymap}"...') -        target_list = [] -        if cli.args.keymap == 'all': -            kb_to_kms = pool.map(_all_keymaps, qmk.keyboard.list_keyboards()) -            for targets in kb_to_kms: -                keyboard = targets[0] -                keymaps = targets[1] -                target_list.extend([(keyboard, keymap) for keymap in keymaps]) -        else: -            target_list = [(kb, cli.args.keymap) for kb in filter(lambda kb: kb is not None, pool.starmap(_keymap_exists, [(kb, cli.args.keymap) for kb in qmk.keyboard.list_keyboards()]))] - -        if len(cli.args.filter) == 0: -            targets = target_list -        else: -            cli.log.info('Parsing data for all matching keyboard/keymap combinations...') -            valid_keymaps = [(e[0], e[1], dotty(e[2])) for e in pool.starmap(_load_keymap_info, target_list)] - -            equals_re = re.compile(r'^(?P<key>[a-zA-Z0-9_\.]+)\s*=\s*(?P<value>[^#]+)$') -            exists_re = re.compile(r'^exists\((?P<key>[a-zA-Z0-9_\.]+)\)$') -            for filter_txt in cli.args.filter: -                f = equals_re.match(filter_txt) -                if f is not None: -                    key = f.group('key') -                    value = f.group('value') -                    cli.log.info(f'Filtering on condition ("{key}" == "{value}")...') - -                    def _make_filter(k, v): -                        expr = fnmatch.translate(v) -                        rule = re.compile(f'^{expr}$', re.IGNORECASE) - -                        def f(e): -                            lhs = e[2].get(k) -                            lhs = str(False if lhs is None else lhs) -                            return rule.search(lhs) is not None - -                        return f - -                    valid_keymaps = filter(_make_filter(key, value), valid_keymaps) - -                f = exists_re.match(filter_txt) -                if f is not None: -                    key = f.group('key') -                    cli.log.info(f'Filtering on condition (exists: "{key}")...') -                    valid_keymaps = filter(lambda e: e[2].get(key) is not None, valid_keymaps) - -            targets = [(e[0], e[1]) for e in valid_keymaps] - +    targets = search_keymap_targets(cli.args.keymap, cli.args.filter)      if len(targets) == 0:          return  | 
