in packages/packages.go [456:541]
func (f *Filter) legacyApply(ctx context.Context, packages Packages) Packages {
if f == nil {
return packages
}
// Checks that only the most recent version of an integration is added to the list
var packagesList Packages
for _, p := range packages {
// Skip experimental packages if flag is not specified.
if p.Release == ReleaseExperimental && !f.Experimental {
continue
}
if f.KibanaVersion != nil {
if valid := p.HasKibanaVersion(f.KibanaVersion); !valid {
continue
}
}
if f.PackageName != "" && f.PackageName != p.Name {
continue
}
if f.PackageVersion != "" && f.PackageVersion != p.Version {
continue
}
if f.PackageType != "" && f.PackageType != p.Type {
continue
}
addPackage := true
if !f.AllVersions {
// Check if the version exists and if it should be added or not.
for i, current := range packagesList {
if current.Name != p.Name {
continue
}
addPackage = false
// If the package in the list is newer or equal, do nothing, unless it is a prerelease.
if current.IsPrerelease() == p.IsPrerelease() && current.IsNewerOrEqual(p) {
continue
}
// If the package in the list is not a prerelease, and current is, do nothing.
if !current.IsPrerelease() && p.IsPrerelease() {
continue
}
// Otherwise replace it.
packagesList[i] = p
}
}
if addPackage {
packagesList = append(packagesList, p)
}
}
if f.AllVersions {
packageHasNonPrerelease := make(map[string]bool)
for _, p := range packagesList {
if !p.IsPrerelease() {
packageHasNonPrerelease[p.Name] = true
}
}
i := 0
for _, p := range packagesList {
if packageHasNonPrerelease[p.Name] && p.IsPrerelease() {
continue
}
packagesList[i] = p
i++
}
packagesList = packagesList[:i]
}
// Filter by category after selecting the newer packages.
packagesList = filterCategories(packagesList, f.Category)
return packagesList
}