]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Fix empty strings for lists and dicts
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 8 Jul 2024 17:41:16 +0000 (19:41 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 8 Jul 2024 19:59:15 +0000 (21:59 +0200)
Parse functions should return None to pick the default value. Also,
we don't get any values at all if unescape=True and the empty string
is passed so make sure we handle that case as well.

mkosi/config.py

index c8fbe5205bd6d80df235e3372aaba9e0ee1db15d..eda345539132f7b9baee9ee1b9e4295b70612171 100644 (file)
@@ -778,18 +778,20 @@ def config_make_list_parser(delimiter: str,
         if value is None:
             return []
 
+        # Empty strings reset the list.
+
         if unescape:
             lex = shlex.shlex(value, posix=True)
             lex.whitespace_split = True
             lex.whitespace = f"\n{delimiter}"
             lex.commenters = ""
             values = list(lex)
+            if reset and not values:
+                return None
         else:
             values = value.replace(delimiter, "\n").split("\n")
-
-        # Empty strings reset the list.
-        if reset and len(values) == 1 and values[0] == "":
-            return []
+            if reset and len(values) == 1 and values[0] == "":
+                return None
 
         return new + [parse(v) for v in values if v]
 
@@ -855,18 +857,20 @@ def config_make_dict_parser(delimiter: str,
 
             return new
 
+        # Empty strings reset the dict.
+
         if unescape:
             lex = shlex.shlex(value, posix=True)
             lex.whitespace_split = True
             lex.whitespace = f"\n{delimiter}"
             lex.commenters = ""
             values = list(lex)
+            if reset and not values:
+                return None
         else:
             values = value.replace(delimiter, "\n").split("\n")
-
-        # Empty strings reset the dict.
-        if reset and len(values) == 1 and values[0] == "":
-            return {}
+            if reset and len(values) == 1 and values[0] == "":
+                return None
 
         return new | dict(parse(v) for v in values if v)