in policies/changes.go [32:75]
func getNecessaryChanges(installedPkgs []*packages.PkgInfo, upgradablePkgs []*packages.PkgInfo, installPkgs, removePkgs, updatePkgs []*agentendpointpb.Package) changes {
installedPkgMap := make(map[string]bool)
for _, pkg := range installedPkgs {
installedPkgMap[pkg.Name] = true
}
upgradeablePkgMap := make(map[string]bool)
for _, pkg := range upgradablePkgs {
upgradeablePkgMap[pkg.Name] = true
}
var pkgsToInstall []string
var pkgsToRemove []string
var pkgsToUpgrade []string
for _, pkg := range installPkgs {
if _, ok := installedPkgMap[pkg.Name]; !ok {
pkgsToInstall = append(pkgsToInstall, pkg.Name)
}
}
for _, pkg := range removePkgs {
if _, ok := installedPkgMap[pkg.Name]; ok {
pkgsToRemove = append(pkgsToRemove, pkg.Name)
}
}
for _, pkg := range updatePkgs {
if _, ok := upgradeablePkgMap[pkg.Name]; ok {
pkgsToUpgrade = append(pkgsToUpgrade, pkg.Name)
continue
}
// If not installed we need to install it.
if _, ok := installedPkgMap[pkg.Name]; !ok {
pkgsToInstall = append(pkgsToInstall, pkg.Name)
}
}
return changes{
packagesToInstall: pkgsToInstall,
packagesToUpgrade: pkgsToUpgrade,
packagesToRemove: pkgsToRemove,
}
}