De-depude model components by location and value #565
Merged
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.
While we previously de-duplicated models by filename/URL, we recently
removed support for de-duping models by location and equality. This can
happen, for example, when a Model is created through a ModelAssembler, and
then added back to another ModelAssembler. If the files that came
together to create the original model are added to the second
ModelAssembler, then the previous file-base de-dupe would not catch the
duplicate model and would fail in the assembler. This change updates
the ModelAssembler to also de-dupe shapes, trait value, and metadata
based on source location and equality. If one of these components
conflict, and the conflcit is exactly the same, and defined at the same
exact file/line/column, then the duplcate is ignored. Note that model
components with no source location (i.e., weren't loaded from a file and
were just created) are never deconflicted in this way because we don't
reliably know that they are in fact the exact same unless we know where
the components originate from.
Issue #, if available:
Description of changes:
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.