fmt.Printf("New version %v supercedes %v, discarding XSAs\n",
fv, vm.Latest)
vm.Latest = fv
- vm.XSAs = []int{}
+ ForEachCodeTree(func(t Tree) error {
+ vm.XSAs[t] = []int{}
+ return nil
+ })
}
} else if init && fv.XenVersion().IsGreaterEqualThan(limit) {
- sm.Versions[fv.XenVersion()] = &VersionMeta{Latest: fv, XSAs: []int{}}
+ sm.InitVersion(fv)
} else {
fmt.Printf("Skipping version %v\n", fv)
}
type VersionMeta struct {
Latest XenVersionFull
- XSAs []int
+ XSAs map[Tree][]int
}
type SecurityMeta struct {
return
}
+func (sm *SecurityMeta) InitVersion(fv XenVersionFull) *VersionMeta {
+ var vm VersionMeta
+
+ vm.XSAs = make(map[Tree][]int)
+ vm.Latest = fv
+ ForEachCodeTree(func(t Tree) error {
+ vm.XSAs[t] = []int{}
+ return nil
+ })
+ sm.Versions[fv.XenVersion()] = &vm
+
+ return &vm
+}
+
+func (sm *SecurityMeta) AddXSA(xsa *XSAMeta) {
+ for _, vm := range sm.Versions {
+ for _, t := range xsa.Trees {
+ vm.XSAs[t] = append(vm.XSAs[t], xsa.XSA)
+ }
+ }
+}
+
type XSAMeta struct {
XSA int
SupportedVersions []XenVersion
+ Trees []Tree
Recipes map[XenVersion]*Recipe
// Not exported
dirty bool