Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve handling of negations in applications array #9

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from

Conversation

simu
Copy link

@simu simu commented Jul 26, 2022

This PR improves handling of negated entries for the applications array.

The first commit is cherry-picked from madduck@9c34784. The second commit adds a check to ensure that we don't add values which have previously been negated to the contents of applications. Additionally the second commit removes negations from the internal negations list after they've been processed once. This ensures that we get the intuitively correct behavior for sequences like adding an item, then removing it and then adding it again, which should result in the item being present in the final list.

The two commits cumulatively address the issue where it wasn't possible to preemptively remove an entry from the applications list in a multi-dimensional hierarchy, e.g. in a Commodore global defaults repository where we may want to exclude applications for a certain Kubernetes distribution regardless of the cloud on which a cluster with that distribution is running.

Please note that this change potentially modifies the behavior of configurations which contain negated entries in the applications array.

While _negations in the Applications type was being properly
initialised, it wasn't copied on merges. This simple fix merely extends
the list, which should work just fine i.e. I don't think it makes sense
to ensure uniqueness here.

Closes: madduck#44
Signed-off-by: martin f. krafft <[email protected]>
@simu simu marked this pull request as draft October 18, 2022 08:08
We add logic in `Applications.append_if_new()` to only insert
non-negated items if they aren't already on our internal negation list.

Additionally, we drop items from the negation list, once we've applied
the negation once either in `append_if_new()` or in `merge_unique()` so
that patterns like adding, then removing and then adding an item again
have the expected result of the item being present in the final list.

This fixes the issue where it wasn't possible to preemptively remove an
entry from the applications list in a multi-dimensional hierarchy, e.g.
in a [Commodore] global defaults repository where we may want to exclude
applications for a certain Kubernetes distribution regardless of the
cloud on which a cluster with that distribution is running.

[Commodore]: https://syn.tools/commodore
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants