aboutsummaryrefslogtreecommitdiff
path: root/lib/python
diff options
context:
space:
mode:
authorJoel Challis <git@zvecr.com>2021-08-20 16:16:59 +0100
committerGitHub <noreply@github.com>2021-08-20 08:16:59 -0700
commitc1add5d0e278da55128964dc305b833fb0bbc063 (patch)
tree8bc2c2b92029f870cfc2115760b069d7263b5daa /lib/python
parent90ff4fe749346c3b92aa8ca6461f5091fabfa99e (diff)
downloadqmk_firmware-c1add5d0e278da55128964dc305b833fb0bbc063.tar.gz
qmk_firmware-c1add5d0e278da55128964dc305b833fb0bbc063.zip
Restore layout count validation (#14068)
Diffstat (limited to 'lib/python')
-rw-r--r--lib/python/qmk/info.py41
1 files changed, 6 insertions, 35 deletions
diff --git a/lib/python/qmk/info.py b/lib/python/qmk/info.py
index d23b3592e..5fc14dc85 100644
--- a/lib/python/qmk/info.py
+++ b/lib/python/qmk/info.py
@@ -341,39 +341,6 @@ def _extract_rules_mk(info_data):
341 return info_data 341 return info_data
342 342
343 343
344def _merge_layouts(info_data, new_info_data):
345 """Merge new_info_data into info_data in an intelligent way.
346 """
347 for layout_name, layout_json in new_info_data['layouts'].items():
348 if layout_name in info_data['layouts']:
349 # Pull in layouts we have a macro for
350 if len(info_data['layouts'][layout_name]['layout']) != len(layout_json['layout']):
351 msg = '%s: %s: Number of elements in info.json does not match! info.json:%s != %s:%s'
352 _log_error(info_data, msg % (info_data['keyboard_folder'], layout_name, len(layout_json['layout']), layout_name, len(info_data['layouts'][layout_name]['layout'])))
353 else:
354 for i, key in enumerate(info_data['layouts'][layout_name]['layout']):
355 key.update(layout_json['layout'][i])
356 else:
357 # Pull in layouts that have matrix data
358 missing_matrix = False
359 for key in layout_json.get('layout', {}):
360 if 'matrix' not in key:
361 missing_matrix = True
362
363 if not missing_matrix:
364 if layout_name in info_data['layouts']:
365 # Update an existing layout with new data
366 for i, key in enumerate(info_data['layouts'][layout_name]['layout']):
367 key.update(layout_json['layout'][i])
368
369 else:
370 # Copy in the new layout wholesale
371 layout_json['c_macro'] = False
372 info_data['layouts'][layout_name] = layout_json
373
374 return info_data
375
376
377def _search_keyboard_h(path): 344def _search_keyboard_h(path):
378 current_path = Path('keyboards/') 345 current_path = Path('keyboards/')
379 aliases = {} 346 aliases = {}
@@ -511,8 +478,12 @@ def merge_info_jsons(keyboard, info_data):
511 layout_name = info_data['layout_aliases'][layout_name] 478 layout_name = info_data['layout_aliases'][layout_name]
512 479
513 if layout_name in info_data['layouts']: 480 if layout_name in info_data['layouts']:
514 for new_key, existing_key in zip(layout['layout'], info_data['layouts'][layout_name]['layout']): 481 if len(info_data['layouts'][layout_name]['layout']) != len(layout['layout']):
515 existing_key.update(new_key) 482 msg = '%s: %s: Number of elements in info.json does not match! info.json:%s != %s:%s'
483 _log_error(info_data, msg % (info_data['keyboard_folder'], layout_name, len(layout['layout']), layout_name, len(info_data['layouts'][layout_name]['layout'])))
484 else:
485 for new_key, existing_key in zip(layout['layout'], info_data['layouts'][layout_name]['layout']):
486 existing_key.update(new_key)
516 else: 487 else:
517 layout['c_macro'] = False 488 layout['c_macro'] = False
518 info_data['layouts'][layout_name] = layout 489 info_data['layouts'][layout_name] = layout