diff mbox series

[2/6] bitbake-setup: fix key-error when changing a new 'section'

Message ID 20251105190636.679388-2-alex.kanavin@gmail.com
State Accepted, archived
Commit 78ab0d15dff5ccf64b0bf681185370779e6cabaf
Headers show
Series [1/6] bitbake-setup: rename function 'default_settings_path' to 'topdir_settings_path' | expand

Commit Message

Alexander Kanavin Nov. 5, 2025, 7:06 p.m. UTC
From: Johannes Schneider <johannes.schneider@leica-geosystems.com>

Setting a key=value in a new section would raise a key-error when
using in-memory settings, e.g:

./bin/bitbake-setup --setting default top-dir-prefix /tmp/bitbake-setup --setting default top-dir-name gs settings foo bar baz

Loading settings from
    /tmp/bitbake-setup/gs/settings.conf

Traceback (most recent call last):
  File "/tmp/bitbake-setup/bitbake/./bin/bitbake-setup", line 853, in <module>
    main()
  File "/tmp/bitbake-setup/bitbake/./bin/bitbake-setup", line 838, in main
    all_settings = merge_settings(builtin_settings, global_settings, topdir_settings, args.setting)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/bitbake-setup/bitbake/./bin/bitbake-setup", line 733, in merge_settings
    all_settings[section][setting] = value
    ~~~~~~~~~~~~^^^^^^^^^
KeyError: 'foo'

Signed-off-by: Johannes Schneider <johannes.schneider@leica-geosystems.com>
---
 bin/bitbake-setup | 4 ++++
 1 file changed, 4 insertions(+)
diff mbox series

Patch

diff --git a/bin/bitbake-setup b/bin/bitbake-setup
index a9035e7c8..3f56f8378 100755
--- a/bin/bitbake-setup
+++ b/bin/bitbake-setup
@@ -726,9 +726,13 @@  def merge_settings(builtin_settings, global_settings, topdir_settings, cmdline_s
     for s in (global_settings, topdir_settings):
         for section, section_settings in s.items():
             for setting, value in section_settings.items():
+                if section not in all_settings.keys():
+                    all_settings[section] = {}
                 all_settings[section][setting] = value
 
     for (section, setting, value) in cmdline_settings:
+        if section not in all_settings.keys():
+            all_settings[section] = {}
         all_settings[section][setting] = value
 
     return all_settings