func()

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
}