Fix underlay provenance and resource path handling
This commit is contained in:
@@ -92,14 +92,35 @@ func composeDocuments(inputs ...*document.Node) (*composedDocument, []Diagnostic
|
||||
for _, input := range inputs {
|
||||
applications = append(applications, historyApplication{layer: LayerBase, value: input})
|
||||
}
|
||||
origins := compositionOrigins(collected.ordered)
|
||||
completeCompositionOrigins(root, Path{}, origins)
|
||||
return &composedDocument{
|
||||
root: root,
|
||||
claims: cloneCompositionClaims(collected.ordered),
|
||||
origins: compositionOrigins(collected.ordered),
|
||||
origins: origins,
|
||||
applications: applications,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Conflict claims treat sequences atomically, but inspection needs origins for
|
||||
// every descendant. Preserve composite mapping claims while filling those gaps.
|
||||
func completeCompositionOrigins(node *document.Node, path Path, origins map[string]Origin) {
|
||||
pointer := path.String()
|
||||
if _, present := origins[pointer]; !present {
|
||||
origins[pointer] = Origin{Layer: LayerBase, Locations: []Location{publicLocation(node.Location)}}
|
||||
}
|
||||
switch node.Kind {
|
||||
case document.Mapping:
|
||||
for _, entry := range node.Mapping {
|
||||
completeCompositionOrigins(entry.Value, path.Key(entry.Key), origins)
|
||||
}
|
||||
case document.Sequence:
|
||||
for index, child := range node.Sequence {
|
||||
completeCompositionOrigins(child, path.Index(index), origins)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (c *compositionClaims) append(node *document.Node, path Path) {
|
||||
claim := compositionClaim{
|
||||
path: path.clone(),
|
||||
|
||||
Reference in New Issue
Block a user