changeset 638:ef485419d723

FIX: Now the merge logic does not interpolate variables in any case. Previously it did sometimes.
author Franz Glasner <f.glasner@feldmann-mg.com>
date Fri, 04 Mar 2022 18:14:12 +0100
parents 4499e9b4855d
children 999cfca55d25
files CHANGES.txt configmix/__init__.py
diffstat 2 files changed, 27 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/CHANGES.txt	Fri Mar 04 17:35:27 2022 +0100
+++ b/CHANGES.txt	Fri Mar 04 18:14:12 2022 +0100
@@ -21,6 +21,10 @@
   configurations: sometimes they were tried to be interpolated -- and
   this failed.
 
+- **[bugfix]**
+  The merge login should never interpolate variables. But some parts
+  of the merge logic did this unintentionally.
+
 
 0.20.4 (2022-01-17)
 ~~~~~~~~~~~~~~~~~~~
--- a/configmix/__init__.py	Fri Mar 04 17:35:27 2022 +0100
+++ b/configmix/__init__.py	Fri Mar 04 18:14:12 2022 +0100
@@ -427,15 +427,15 @@
             if filter_comments and _is_comment(k):
                 continue
             if k in user:
-                if user[k] == constants.DEL_VALUE:
+                if isinstance(user, Configuration):
+                    ukv = user.getitem_ns(k)
+                else:
+                    ukv = user[k]
+                if ukv == constants.DEL_VALUE:
                     # do not copy
                     del user[k]
                 else:
-                    if isinstance(user, Configuration):
-                        user[k] = _merge(
-                            user.getitem_ns(k), v, filter_comments)
-                    else:
-                        user[k] = _merge(user[k], v, filter_comments)
+                    user[k] = _merge(ukv, v, filter_comments)
             else:
                 user[k] = v
     _filter_deletions(user)
@@ -451,15 +451,15 @@
             if filter_comments and _is_comment(k):
                 continue
             if k in user:
-                if user[k] == constants.DEL_VALUE:
+                if isinstance(user, Configuration):
+                    ukv = user.getitem_ns(k)
+                else:
+                    ukv = user[k]
+                if ukv == constants.DEL_VALUE:
                     # do not copy
                     del user[k]
                 else:
-                    if isinstance(user, Configuration):
-                        user[k] = _merge(
-                            user.getitem_ns(k), v, filter_comments)
-                    else:
-                        user[k] = _merge(user[k], v, filter_comments)
+                    user[k] = _merge(ukv, v, filter_comments)
             else:
                 user[k] = v
     return user
@@ -488,15 +488,15 @@
             if filter_comments and _is_comment(k):
                 continue
             if k in user:
-                if user[k] == constants.DEL_VALUE:
+                if isinstance(user, Configuration):
+                    ukv = user.getitem_ns(k)
+                else:
+                    ukv = user[k]
+                if ukv == constants.DEL_VALUE:
                     # do not copy
                     del user[k]
                 else:
-                    if isinstance(user, Configuration):
-                        user[k] = _safe_merge(
-                            user.getitem_ns(k), v, filter_comments)
-                    else:
-                        user[k] = _safe_merge(user[k], v, filter_comments)
+                    user[k] = _safe_merge(ukv, v, filter_comments)
             else:
                 user[k] = copy.deepcopy(v)
     _filter_deletions(user)
@@ -512,15 +512,15 @@
             if filter_comments and _is_comment(k):
                 continue
             if k in user:
+                if isinstance(user, Configuration):
+                    ukv = user.getitem_ns(k)
+                else:
+                    ukv = user[k]
                 if user[k] == constants.DEL_VALUE:
                     # do not copy
                     del user[k]
                 else:
-                    if isinstance(user, Configuration):
-                        user[k] = _safe_merge(
-                            user.getitem_ns(k), v, filter_comments)
-                    else:
-                        user[k] = _safe_merge(user[k], v, filter_comments)
+                    user[k] = _safe_merge(ukv, v, filter_comments)
             else:
                 user[k] = copy.deepcopy(v)
     return user