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)
| 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. |
| 124 | func (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 |
no test coverage detected