Unify root/material unknown resolution with recursive Input traversal. Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
48 lines
941 B
Go
48 lines
941 B
Go
package policy
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
func (inp *Input) setUnknowns(unknowns []string) {
|
|
if inp == nil {
|
|
return
|
|
}
|
|
if len(unknowns) == 0 {
|
|
inp.unknowns = nil
|
|
return
|
|
}
|
|
out := make([]string, 0, len(unknowns))
|
|
for _, u := range unknowns {
|
|
v := strings.TrimPrefix(u, "input.")
|
|
if v == "" {
|
|
continue
|
|
}
|
|
out = append(out, v)
|
|
}
|
|
inp.unknowns = out
|
|
}
|
|
|
|
func (inp Input) Unknowns() []string {
|
|
var refs []string
|
|
collectInputUnknowns(inp, "input", &refs)
|
|
return refs
|
|
}
|
|
|
|
func collectInputUnknowns(inp Input, prefix string, refs *[]string) {
|
|
for _, u := range inp.unknowns {
|
|
if u == "" {
|
|
continue
|
|
}
|
|
*refs = append(*refs, prefix+"."+u)
|
|
}
|
|
if inp.Image == nil || inp.Image.Provenance == nil {
|
|
return
|
|
}
|
|
for i := range inp.Image.Provenance.Materials {
|
|
childPrefix := fmt.Sprintf("%s.image.provenance.materials[%d]", prefix, i)
|
|
collectInputUnknowns(inp.Image.Provenance.Materials[i], childPrefix, refs)
|
|
}
|
|
}
|