Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Improves YAML list merging behavior to preserve within-file duplicates while simplifying the
matching logic. This makes the behavior more predictable and intuitive.
Changes
1. Preserve Within-File Duplicates (Order-Independent)
Previously,
deduplicate=Truewould remove ALL duplicate list items globally, includingduplicates within a single file.
New behavior: If ANY file contains duplicates in a list, that entire list is concatenated
(no merging) to preserve all duplicates. This ensures:
Example:
Before: 1 device (file1 duplicates lost)
After: 3 devices (all preserved, no merging)
2. Relaxed Matching Logic
Previously, dict items would NOT merge if both sides had unique primitive keys. This prevented
useful scenarios like combining complementary configuration data.
New behavior: Items merge as long as they share at least one primitive key with matching values.
Both sides can have unique keys - they'll be combined.
Example:
Before: 2 separate items (both have unique keys)
After: 1 merged item {name: switch1, vlan: 100, port: eth0}
Implementation Details
_has_duplicates_in_list()helper function to detect duplicates using same matching logicmerge_dict()to check both source and destination lists for duplicates before mergingBreaking Changes
Duplicate preservation: Lists containing duplicates in ANY file will now be concatenated
instead of merged, preserving all within-file duplicates. This may result in more items than
before if you have duplicates and previously relied on cross-file merging.
Relaxed matching: Items now merge when they share primitive keys, even if both sides have
unique keys. Complementary configuration data will be combined instead of kept separate. Items
that previously stayed separate may now merge.
Testing