Speed improvements to qmk find. (#24385)

This commit is contained in:
Nick Brassel 2024-11-08 15:57:22 +11:00 committed by GitHub
parent 4f9ef90754
commit 580d18d2e9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 38 additions and 9 deletions

View File

@ -1,5 +1,6 @@
"""Command to search through all keyboards and keymaps for a given search criteria. """Command to search through all keyboards and keymaps for a given search criteria.
""" """
import os
from milc import cli from milc import cli
from qmk.search import filter_help, search_keymap_targets from qmk.search import filter_help, search_keymap_targets
from qmk.util import maybe_exit_config from qmk.util import maybe_exit_config
@ -20,6 +21,7 @@ from qmk.util import maybe_exit_config
def find(cli): def find(cli):
"""Search through all keyboards and keymaps for a given search criteria. """Search through all keyboards and keymaps for a given search criteria.
""" """
os.environ.setdefault('SKIP_SCHEMA_VALIDATION', '1')
maybe_exit_config(should_exit=False, should_reraise=True) maybe_exit_config(should_exit=False, should_reraise=True)
targets = search_keymap_targets([('all', cli.config.find.keymap)], cli.args.filter) targets = search_keymap_targets([('all', cli.config.find.keymap)], cli.args.filter)

View File

@ -20,6 +20,8 @@ def mass_compile_targets(targets: List[BuildTarget], clean: bool, dry_run: bool,
if len(targets) == 0: if len(targets) == 0:
return return
os.environ.setdefault('SKIP_SCHEMA_VALIDATION', '1')
make_cmd = find_make() make_cmd = find_make()
builddir = Path(QMK_FIRMWARE) / '.build' builddir = Path(QMK_FIRMWARE) / '.build'
makefile = builddir / 'parallel_kb_builds.mk' makefile = builddir / 'parallel_kb_builds.mk'

View File

@ -1,6 +1,7 @@
"""Functions that help us generate and use info.json files. """Functions that help us generate and use info.json files.
""" """
import re import re
import os
from pathlib import Path from pathlib import Path
import jsonschema import jsonschema
from dotty_dict import dotty from dotty_dict import dotty
@ -14,7 +15,7 @@ from qmk.keyboard import config_h, rules_mk
from qmk.commands import parse_configurator_json from qmk.commands import parse_configurator_json
from qmk.makefile import parse_rules_mk_file from qmk.makefile import parse_rules_mk_file
from qmk.math import compute from qmk.math import compute
from qmk.util import maybe_exit from qmk.util import maybe_exit, truthy
true_values = ['1', 'on', 'yes'] true_values = ['1', 'on', 'yes']
false_values = ['0', 'off', 'no'] false_values = ['0', 'off', 'no']
@ -262,6 +263,8 @@ def info_json(keyboard, force_layout=None):
info_data["community_layouts"] = [force_layout] info_data["community_layouts"] = [force_layout]
# Validate # Validate
# Skip processing if necessary
if not truthy(os.environ.get('SKIP_SCHEMA_VALIDATION'), False):
_validate(keyboard, info_data) _validate(keyboard, info_data)
# Check that the reported matrix size is consistent with the actual matrix size # Check that the reported matrix size is consistent with the actual matrix size
@ -944,6 +947,7 @@ def merge_info_jsons(keyboard, info_data):
_log_error(info_data, "Invalid file %s, root object should be a dictionary." % (str(info_file),)) _log_error(info_data, "Invalid file %s, root object should be a dictionary." % (str(info_file),))
continue continue
if not truthy(os.environ.get('SKIP_SCHEMA_VALIDATION'), False):
try: try:
validate(new_info_data, 'qmk.keyboard.v1') validate(new_info_data, 'qmk.keyboard.v1')
except jsonschema.ValidationError as e: except jsonschema.ValidationError as e:

View File

@ -27,6 +27,27 @@ def maybe_exit_config(should_exit: bool = True, should_reraise: bool = False):
maybe_exit_reraise = should_reraise maybe_exit_reraise = should_reraise
def truthy(value, value_if_unknown=False):
"""Returns True if the value is truthy, False otherwise.
Deals with:
True: 1, true, t, yes, y, on
False: 0, false, f, no, n, off
"""
if value in {False, True}:
return bool(value)
test_value = str(value).strip().lower()
if test_value in {"1", "true", "t", "yes", "y", "on"}:
return True
if test_value in {"0", "false", "f", "no", "n", "off"}:
return False
return value_if_unknown
@contextlib.contextmanager @contextlib.contextmanager
def parallelize(): def parallelize():
"""Returns a function that can be used in place of a map() call. """Returns a function that can be used in place of a map() call.