MCPcopy Create free account
hub / github.com/compose-spec/compose-go / cachedResolve

Method cachedResolve

loader/reset.go:124–148  ·  view source on GitHub ↗

cachedResolve resolves node (a container without !reset/!override), serving from cache on repeat visits to prevent re-traversal. It is only called after tag checks are done in resolveReset, so it never receives !reset/!override-tagged nodes.

(node *yaml.Node, path tree.Path)

Source from the content-addressed store, hash-verified

122// repeat visits to prevent re-traversal. It is only called after tag checks are done in
123// resolveReset, so it never receives !reset/!override-tagged nodes.
124func (p *ResetProcessor) cachedResolve(node *yaml.Node, path tree.Path) (*yaml.Node, error) {
125 if cached, ok := p.resolvedNodes[node]; ok {
126 for _, rel := range cached.relativePaths {
127 p.paths = append(p.paths, joinPath(path, rel))
128 }
129 return cached.node, nil
130 }
131
132 startIdx := len(p.paths)
133 resolved, err := p.resolveContainer(node, path)
134 if err != nil {
135 return nil, err
136 }
137
138 var relPaths []tree.Path
139 for _, addedPath := range p.paths[startIdx:] {
140 rel, err := subPath(addedPath, path)
141 if err != nil {
142 return nil, err
143 }
144 relPaths = append(relPaths, rel)
145 }
146 p.resolvedNodes[node] = nodeCache{node: resolved, relativePaths: relPaths}
147 return resolved, nil
148}
149
150// resolveContainer processes the children of a Sequence or Mapping node.
151// AliasNodes must be kept as-is in the output Content; the resolved value is used only

Callers 1

resolveResetMethod · 0.95

Calls 3

resolveContainerMethod · 0.95
joinPathFunction · 0.85
subPathFunction · 0.85

Tested by

no test coverage detected