From b88498ba85aaf2fdd955ee9cbae6cffb327497de Mon Sep 17 00:00:00 2001
From: Nick Brassel <nick@tzarc.org>
Date: Sun, 25 Apr 2021 11:15:54 +1000
Subject: Fix CLI incorrectly following `DEFAULT_FOLDER` (#12529)

* Attempt to sort out incorrectly following DEFAULT_FOLDER.

* Fix CI checks.

* qmk pyformat
---
 lib/python/qmk/keyboard.py | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

(limited to 'lib/python')

diff --git a/lib/python/qmk/keyboard.py b/lib/python/qmk/keyboard.py
index 0168d17ef3..e457685567 100644
--- a/lib/python/qmk/keyboard.py
+++ b/lib/python/qmk/keyboard.py
@@ -92,7 +92,16 @@ def list_keyboards():
     kb_wildcard = os.path.join(base_path, "**", "rules.mk")
     paths = [path for path in glob(kb_wildcard, recursive=True) if 'keymaps' not in path]
 
-    return sorted(map(_find_name, paths))
+    return sorted(set(map(resolve_keyboard, map(_find_name, paths))))
+
+
+def resolve_keyboard(keyboard):
+    cur_dir = Path('keyboards')
+    rules = parse_rules_mk_file(cur_dir / keyboard / 'rules.mk')
+    while 'DEFAULT_FOLDER' in rules and keyboard != rules['DEFAULT_FOLDER']:
+        keyboard = rules['DEFAULT_FOLDER']
+        rules = parse_rules_mk_file(cur_dir / keyboard / 'rules.mk')
+    return keyboard
 
 
 def config_h(keyboard):
@@ -106,8 +115,7 @@ def config_h(keyboard):
     """
     config = {}
     cur_dir = Path('keyboards')
-    rules = rules_mk(keyboard)
-    keyboard = Path(rules['DEFAULT_FOLDER'] if 'DEFAULT_FOLDER' in rules else keyboard)
+    keyboard = Path(resolve_keyboard(keyboard))
 
     for dir in keyboard.parts:
         cur_dir = cur_dir / dir
@@ -125,13 +133,10 @@ def rules_mk(keyboard):
     Returns:
         a dictionary representing the content of the entire rules.mk tree for a keyboard
     """
-    keyboard = Path(keyboard)
     cur_dir = Path('keyboards')
+    keyboard = Path(resolve_keyboard(keyboard))
     rules = parse_rules_mk_file(cur_dir / keyboard / 'rules.mk')
 
-    if 'DEFAULT_FOLDER' in rules:
-        keyboard = Path(rules['DEFAULT_FOLDER'])
-
     for i, dir in enumerate(keyboard.parts):
         cur_dir = cur_dir / dir
         rules = parse_rules_mk_file(cur_dir / 'rules.mk', rules)
-- 
cgit v1.2.3