func getNecessaryChanges()

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,
	}
}