[core] Fix some extends cases

This commit is contained in:
Jesse Hills 2024-05-15 11:20:26 +12:00
parent 55e4532a88
commit 1b2d7d0067
No known key found for this signature in database
GPG Key ID: BEAAE804EFD8E83A
1 changed files with 17 additions and 4 deletions

View File

@ -50,14 +50,19 @@ def merge_config(full_old, full_new):
return new
res = old.copy()
ids = {
v[CONF_ID]: i
v_id: i
for i, v in enumerate(res)
if CONF_ID in v and isinstance(v[CONF_ID], str)
if (v_id := v.get(CONF_ID)) and isinstance(v_id, str)
}
extend_ids = {
v_id.value: i
for i, v in enumerate(res)
if (v_id := v.get(CONF_ID)) and isinstance(v_id, Extend)
}
ids_to_delete = []
for v in new:
if CONF_ID in v:
new_id = v[CONF_ID]
if new_id := v.get(CONF_ID):
if isinstance(new_id, Extend):
new_id = new_id.value
if new_id in ids:
@ -69,6 +74,14 @@ def merge_config(full_old, full_new):
if new_id in ids:
ids_to_delete.append(ids[new_id])
continue
elif (
new_id in extend_ids
): # When a package is extending a non-packaged item
extend_res = res[extend_ids[new_id]]
extend_res[CONF_ID] = new_id
new_v = merge(v, extend_res)
res[extend_ids[new_id]] = new_v
continue
else:
ids[new_id] = len(res)
res.append(v)