Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 52233be2 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Fix single value variable inheritance order"

parents cba35df6 32e413a2
Loading
Loading
Loading
Loading
+15 −6
Original line number Diff line number Diff line
@@ -168,6 +168,8 @@ def _product_configuration(top_pcm_name, top_pcm, input_variables_init):
        children = handle.inherited_modules
        if _options.trace_modules:
            print("#   ", "    ".join(children.keys()))
        # Starlark dictionaries are guaranteed to iterate through in insertion order,
        # so children.keys() will be ordered by the inherit() calls
        configs[name] = (pcm, handle.cfg, children.keys(), False)
        pcm_count = pcm_count + 1

@@ -291,12 +293,6 @@ def _percolate_inherited(configs, cfg_name, cfg, children_names):
        child_cfg = configs[child_name][1]
        for attr, value in child_cfg.items():
            if type(value) != "list":
                # Single value variables take the first value available from the leftmost
                # branch of the tree. If we also had "or attr in percolated_attrs" in this
                # if statement, it would take the value from the rightmost branch.
                if cfg.get(attr, "") == "":
                    cfg[attr] = value
                    percolated_attrs[attr] = True
                continue
            if attr in percolated_attrs:
                # We already are percolating this one, just add this list
@@ -306,6 +302,19 @@ def _percolate_inherited(configs, cfg_name, cfg, children_names):
                cfg[attr] = []
                __move_items(cfg[attr], child_cfg, attr)

    # single value variables need to be inherited in alphabetical order,
    # not in the order of inherit() calls.
    for child_name in sorted(children_names):
        child_cfg = configs[child_name][1]
        for attr, value in child_cfg.items():
            if type(value) != "list":
                # Single value variables take the first value available from the leftmost
                # branch of the tree. If we also had "or attr in percolated_attrs" in this
                # if statement, it would take the value from the rightmost branch.
                if cfg.get(attr, "") == "":
                    cfg[attr] = value
                    percolated_attrs[attr] = True

    for attr in _options.trace_variables:
        if attr in percolated_attrs:
            print("%s: %s^=%s" % (cfg_name, attr, cfg[attr]))
+2 −0
Original line number Diff line number Diff line
@@ -19,3 +19,5 @@ def init(g, handle):

  cfg["PRODUCT_CHARACTERISTICS"] = "tablet"
  cfg["PRODUCT_DEFAULT_DEV_CERTIFICATE"] = "vendor/myvendor/certs/devkeys/devkey"
  cfg.setdefault("PRODUCT_PACKAGES", [])
  cfg["PRODUCT_PACKAGES"] += ["bar"]
+2 −0
Original line number Diff line number Diff line
@@ -18,3 +18,5 @@ def init(g, handle):
  cfg = rblf.cfg(handle)

  cfg["PRODUCT_CHARACTERISTICS"] = "nosdcard"
  cfg.setdefault("PRODUCT_PACKAGES", [])
  cfg["PRODUCT_PACKAGES"] += ["foo"]
+1 −1
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@ load(":inherit2.rbc", _inherit2_init = "init")

def init(g, handle):
  cfg = rblf.cfg(handle)
  rblf.inherit(handle, "test/inherit1", _inherit1_init)
  rblf.inherit(handle, "test/inherit2", _inherit2_init)
  rblf.inherit(handle, "test/inherit1", _inherit1_init)

  cfg["PRODUCT_DEFAULT_DEV_CERTIFICATE"] = ""
+1 −0
Original line number Diff line number Diff line
@@ -25,3 +25,4 @@ def test():
    (globals, config, globals_base) = rblf.product_configuration("test/device", init, input_variables_init)
    assert_eq("tablet", config["PRODUCT_CHARACTERISTICS"])
    assert_eq("vendor/myvendor/certs/devkeys/devkey", config["PRODUCT_DEFAULT_DEV_CERTIFICATE"])
    assert_eq(["foo", "bar"], config["PRODUCT_PACKAGES"])