mirror of
https://github.com/opentofu/opentofu.git
synced 2025-02-25 18:45:20 -06:00
Revert back to the previous implementation.
Signed-off-by: AYM1607 <u.g.a.mariano@gmail.com>
This commit is contained in:
parent
03c6700fd2
commit
c3cb9c0485
@ -15,6 +15,7 @@ import (
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/apparentlymart/go-versions/versions"
|
||||
version "github.com/hashicorp/go-version"
|
||||
"github.com/hashicorp/hcl/v2"
|
||||
"github.com/hashicorp/hcl/v2/hclsyntax"
|
||||
@ -505,28 +506,44 @@ func (i *ModuleInstaller) installRegistryModule(ctx context.Context, req *config
|
||||
// If we've found a pre-release version then we'll ignore it unless
|
||||
// it was exactly requested.
|
||||
//
|
||||
// Although the apparentlymart/go-versions library is already used to
|
||||
// handle constraints for providers, and it natively supports the
|
||||
// "prerelease versions must be exactly requested". Its previous usage
|
||||
// in this code path introduced inconsistencies around the handling
|
||||
// of the "v" prefixes.
|
||||
//
|
||||
// If the aforementioned library is to be adopted, it should be
|
||||
// announced as a breaking change and must be used to handle constraints
|
||||
// in all scenarios, not just for pre-release versions.
|
||||
// The prerelease checking will be handled by a different library for
|
||||
// 2 reasons. First, this other library automatically includes the
|
||||
// "prerelease versions must be exactly requested" behaviour that we are
|
||||
// looking for. Second, this other library is used to handle all version
|
||||
// constraints for the provider logic and this is the first step to
|
||||
// making the module and provider version logic match.
|
||||
if v.Prerelease() != "" {
|
||||
conS := req.VersionConstraint.Required.String()
|
||||
// The exact wording from the docs is: "A prerelease version can be
|
||||
// selected only by an exact version constraint (the = operator or no operator).
|
||||
// Prerelease versions do not match inexact operators such as >=, ~>, etc."
|
||||
//
|
||||
// Which means that that if the constraint contains any operators
|
||||
// other than "=", the result from `Check` should be discarded, so
|
||||
// we can stop at this point.
|
||||
if strings.ContainsAny(conS, "<>!~^") {
|
||||
log.Printf("[WARN] ModuleInstaller: %s ignoring %s because the version constraints (%s) contain a non-exact-match operator", key, v, conS)
|
||||
// At this point all versions published by the module with
|
||||
// prerelease metadata will be checked. Users may not have even
|
||||
// requested this prerelease so don't print lots of unnecessary #
|
||||
// warnings.
|
||||
acceptableVersions, err := versions.MeetingConstraintsString(req.VersionConstraint.Required.String())
|
||||
if err != nil {
|
||||
log.Printf("[WARN] ModuleInstaller: %s ignoring %s because the version constraints (%s) could not be parsed: %s", key, v, req.VersionConstraint.Required.String(), err.Error())
|
||||
continue
|
||||
}
|
||||
|
||||
// Validate the version is also readable by the other versions
|
||||
// library.
|
||||
version, err := versions.ParseVersion(v.String())
|
||||
if err != nil {
|
||||
log.Printf("[WARN] ModuleInstaller: %s ignoring %s because the version (%s) reported by the module could not be parsed: %s", key, v, v.String(), err.Error())
|
||||
continue
|
||||
}
|
||||
|
||||
// Finally, check if the prerelease is acceptable to version. As
|
||||
// highlighted previously, we go through all of this because the
|
||||
// apparentlymart/go-versions library handles prerelease constraints
|
||||
// in the approach we want to.
|
||||
if !acceptableVersions.Has(version) {
|
||||
log.Printf("[TRACE] ModuleInstaller: %s ignoring %s because it is a pre-release and was not requested exactly", key, v)
|
||||
continue
|
||||
}
|
||||
|
||||
// If we reach here, it means this prerelease version was exactly
|
||||
// requested according to the extra constraints of this library.
|
||||
// We fall through and allow the other library to also validate it
|
||||
// for consistency.
|
||||
}
|
||||
|
||||
if latestVersion == nil || v.GreaterThan(latestVersion) {
|
||||
|
Loading…
Reference in New Issue
Block a user