summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Challis <git@zvecr.com>2023-01-03 03:15:29 +0000
committerGitHub <noreply@github.com>2023-01-03 14:15:29 +1100
commitc345278101b3882a2f33b078021ab31a6129120a (patch)
tree3b5bc671cf95fc56cc9e5eea2b62d223e44f321e
parent44800f119d330bb0f02f3d13c36cafe57adc20ee (diff)
Replace list_keyboards.sh with CLI calls (#19485)
-rw-r--r--Makefile8
-rw-r--r--lib/python/qmk/cli/list/keyboards.py3
-rw-r--r--lib/python/qmk/keyboard.py10
-rwxr-xr-xutil/list_keyboards.sh6
4 files changed, 13 insertions, 14 deletions
diff --git a/Makefile b/Makefile
index 8f7ad39b83..e10816aa78 100644
--- a/Makefile
+++ b/Makefile
@@ -153,7 +153,7 @@ define PARSE_RULE
153 $$(eval $$(call PARSE_TEST)) 153 $$(eval $$(call PARSE_TEST))
154 # If the rule starts with the name of a known keyboard, then continue 154 # If the rule starts with the name of a known keyboard, then continue
155 # the parsing from PARSE_KEYBOARD 155 # the parsing from PARSE_KEYBOARD
156 else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(shell util/list_keyboards.sh | sort -u)),true) 156 else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(shell $(QMK_BIN) list-keyboards --no-resolve-defaults)),true)
157 KEYBOARD_RULE=$$(MATCHED_ITEM) 157 KEYBOARD_RULE=$$(MATCHED_ITEM)
158 $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM))) 158 $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM)))
159 else 159 else
@@ -246,7 +246,7 @@ endef
246# if we are going to compile all keyboards, match the rest of the rule 246# if we are going to compile all keyboards, match the rest of the rule
247# for each of them 247# for each of them
248define PARSE_ALL_KEYBOARDS 248define PARSE_ALL_KEYBOARDS
249 $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYBOARD,$(shell util/list_keyboards.sh | sort -u))) 249 $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYBOARD,$(shell $(QMK_BIN) list-keyboards --no-resolve-defaults)))
250endef 250endef
251 251
252# Prints a list of all known keymaps for the given keyboard 252# Prints a list of all known keymaps for the given keyboard
@@ -443,11 +443,11 @@ git-submodules: git-submodule
443 443
444.PHONY: list-keyboards 444.PHONY: list-keyboards
445list-keyboards: 445list-keyboards:
446 util/list_keyboards.sh | sort -u | tr '\n' ' ' 446 $(QMK_BIN) list-keyboards --no-resolve-defaults | tr '\n' ' '
447 447
448.PHONY: generate-keyboards-file 448.PHONY: generate-keyboards-file
449generate-keyboards-file: 449generate-keyboards-file:
450 util/list_keyboards.sh | sort -u 450 $(QMK_BIN) list-keyboards --no-resolve-defaults
451 451
452.PHONY: clean 452.PHONY: clean
453clean: 453clean:
diff --git a/lib/python/qmk/cli/list/keyboards.py b/lib/python/qmk/cli/list/keyboards.py
index 8b6c451673..405b9210e4 100644
--- a/lib/python/qmk/cli/list/keyboards.py
+++ b/lib/python/qmk/cli/list/keyboards.py
@@ -5,9 +5,10 @@ from milc import cli
5import qmk.keyboard 5import qmk.keyboard
6 6
7 7
8@cli.argument('--no-resolve-defaults', arg_only=True, action='store_false', help='Ignore any "DEFAULT_FOLDER" within keyboards rules.mk')
8@cli.subcommand("List the keyboards currently defined within QMK") 9@cli.subcommand("List the keyboards currently defined within QMK")
9def list_keyboards(cli): 10def list_keyboards(cli):
10 """List the keyboards currently defined within QMK 11 """List the keyboards currently defined within QMK
11 """ 12 """
12 for keyboard_name in qmk.keyboard.list_keyboards(): 13 for keyboard_name in qmk.keyboard.list_keyboards(cli.args.no_resolve_defaults):
13 print(keyboard_name) 14 print(keyboard_name)
diff --git a/lib/python/qmk/keyboard.py b/lib/python/qmk/keyboard.py
index 6ddbba8fa5..0c980faf2b 100644
--- a/lib/python/qmk/keyboard.py
+++ b/lib/python/qmk/keyboard.py
@@ -98,14 +98,18 @@ def keyboard_completer(prefix, action, parser, parsed_args):
98 return list_keyboards() 98 return list_keyboards()
99 99
100 100
101def list_keyboards(): 101def list_keyboards(resolve_defaults=True):
102 """Returns a list of all keyboards. 102 """Returns a list of all keyboards - optionally processing any DEFAULT_FOLDER.
103 """ 103 """
104 # We avoid pathlib here because this is performance critical code. 104 # We avoid pathlib here because this is performance critical code.
105 kb_wildcard = os.path.join(base_path, "**", "rules.mk") 105 kb_wildcard = os.path.join(base_path, "**", "rules.mk")
106 paths = [path for path in glob(kb_wildcard, recursive=True) if os.path.sep + 'keymaps' + os.path.sep not in path] 106 paths = [path for path in glob(kb_wildcard, recursive=True) if os.path.sep + 'keymaps' + os.path.sep not in path]
107 107
108 return sorted(set(map(resolve_keyboard, map(_find_name, paths)))) 108 found = map(_find_name, paths)
109 if resolve_defaults:
110 found = map(resolve_keyboard, found)
111
112 return sorted(set(found))
109 113
110 114
111def resolve_keyboard(keyboard): 115def resolve_keyboard(keyboard):
diff --git a/util/list_keyboards.sh b/util/list_keyboards.sh
deleted file mode 100755
index 0d1dae888f..0000000000
--- a/util/list_keyboards.sh
+++ /dev/null
@@ -1,6 +0,0 @@
1#!/bin/sh
2# Temporary shell script to find keyboards
3#
4# This allows us to include DEFAULT_FOLDER targets.
5
6find -L keyboards -type f -name rules.mk | grep -v keymaps | sed 's!keyboards/\(.*\)/rules.mk!\1!'