[assembly] Allow overrides to __append_to_ lists

The default merge strategy for developer overrides is to fully override
any key found in a dictionary. This is simple to understand but causes
extra toil for developers that want to add a new entry to a list. It
would require the developer to find the config definition, copy the
previous list into their developer overrides, then add their entry to
the list. The config definition may be in a separate repository at a
specific pinned version, therefore the previous list could be hard to
find.

This CL adds the ability to developers to indicate that they want to
append to the previous list instead of overriding it.

We cannot use periods or colons as delimiters, because this must work
with both GN and Bazel. Extra underscores are our best option.

Suggest we have this config:

{
  key: [ value1, value2, value3 ],
}

Developers can put this in their overrides to append:

{
  __append_to_key: [ value4 ],
}

And the result would be:

{
  key: [ value1, value2, value3, value4 ]
}

Change-Id: I516a15048a5ac81de6ed86e8973a84b77a1b7a74
Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/1137515
Commit-Queue: Auto-Submit <auto-submit@fuchsia-infra.iam.gserviceaccount.com>
Fuchsia-Auto-Submit: Aidan Wolter <awolter@google.com>
Reviewed-by: Aaron Wood <aaronwood@google.com>
Reviewed-by: David Iserovich <diserovich@google.com>
1 file changed
tree: bee21c52078486f166ebf5e1b87dc4ea44321b67
  1. boards/
  2. build/
  3. bundles/
  4. docs/
  5. examples/
  6. infra/
  7. products/
  8. scripts/
  9. sdk/
  10. src/
  11. third_party/
  12. tools/
  13. zircon/
  14. .clang-format
  15. .clang-tidy
  16. .editorconfig
  17. .git-blame-ignore-revs
  18. .gitattributes
  19. .gitignore
  20. .gitmodules
  21. .gn
  22. .ignore
  23. analysis_options.yaml
  24. AUTHORS
  25. BUILD.gn
  26. CODE_OF_CONDUCT.md
  27. CONTRIBUTING.md
  28. fuchsia.code-workspace
  29. LICENSE
  30. OWNERS
  31. PATENTS
  32. pyproject.toml
  33. pyrightconfig.json
  34. README.md
  35. rustfmt.toml
  36. shac.star
  37. shac.textproto
README.md

Fuchsia

What is Fuchsia?

Fuchsia is an open source, general purpose operating system supporting modern 64-bit Intel and ARM processors.

We expect everyone interacting with our project to respect our code of conduct.

Read more about Fuchsia's principles.

How can I build and run Fuchsia?

See Getting Started.

Where can I learn more about Fuchsia?

See fuchsia.dev.