func()

in validators/package_validator_linux.go [118:159]


func (validator *packageValidator) validate(packageSpecs []PackageSpec, manager packageManager) ([]error, []error) {
	var errs []error
	for _, spec := range packageSpecs {
		// Substitute variables in package name.
		packageName := resolvePackageName(spec.Name, validator.kernelRelease)

		nameWithVerRange := fmt.Sprintf("%s (%s)", packageName, spec.VersionRange)

		// Get the version of the package on the running machine.
		version, err := manager.getPackageVersion(packageName)
		if err != nil {
			errs = append(errs, err)
			validator.reporter.Report(nameWithVerRange, "not installed", bad)
			continue
		}

		// Version requirement will not be enforced if version range is
		// not specified in the spec.
		if spec.VersionRange == "" {
			validator.reporter.Report(packageName, version, good)
			continue
		}

		// Convert both the version range in the spec and the version returned
		// from package manager to semantic version format, and then check if
		// the version is in the range.
		sv, err := semver.Make(toSemVer(version))
		if err != nil {
			errs = append(errs, err)
			validator.reporter.Report(nameWithVerRange, "internal error", bad)
			continue
		}
		versionRange := semver.MustParseRange(toSemVerRange(spec.VersionRange))
		if versionRange(sv) {
			validator.reporter.Report(nameWithVerRange, version, good)
		} else {
			errs = append(errs, errors.Errorf("package \"%s %s\" does not meet the spec \"%s (%s)\"", packageName, sv, packageName, spec.VersionRange))
			validator.reporter.Report(nameWithVerRange, version, bad)
		}
	}
	return nil, errs
}