github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/internal/runners/manifest/version.go (about)

     1  package manifest
     2  
     3  import (
     4  	"github.com/ActiveState/cli/internal/locale"
     5  	"github.com/ActiveState/cli/internal/output"
     6  	"github.com/ActiveState/cli/pkg/buildplan"
     7  	"github.com/ActiveState/cli/pkg/platform/api/buildplanner/types"
     8  	platformModel "github.com/ActiveState/cli/pkg/platform/model"
     9  )
    10  
    11  type resolvedVersion struct {
    12  	Requested string `json:"requested"`
    13  	Resolved  string `json:"resolved"`
    14  }
    15  
    16  func (v *resolvedVersion) String() string {
    17  	if v.Resolved != "" {
    18  		return locale.Tl("manifest_version_resolved", "[CYAN]{{.V0}}[/RESET] → [CYAN]{{.V1}}[/RESET]", v.Requested, v.Resolved)
    19  	}
    20  	return locale.Tl("manifest_version", "[CYAN]{{.V0}}[/RESET]", v.Requested)
    21  }
    22  
    23  func (v *resolvedVersion) MarshalStructured(_ output.Format) interface{} {
    24  	if v.Resolved == "" {
    25  		v.Resolved = v.Requested
    26  	}
    27  
    28  	if v.Requested == "auto" {
    29  		v.Requested = ""
    30  	}
    31  
    32  	return v
    33  }
    34  
    35  func resolveVersion(req types.Requirement, bpReqs buildplan.Ingredients) *resolvedVersion {
    36  	var requested string
    37  	var resolved string
    38  
    39  	if req.VersionRequirement != nil {
    40  		requested = platformModel.BuildPlannerVersionConstraintsToString(req.VersionRequirement)
    41  	} else {
    42  		requested = locale.Tl("manifest_version_auto", "auto")
    43  		for _, bpr := range bpReqs {
    44  			if bpr.Namespace == req.Namespace && bpr.Name == req.Name {
    45  				resolved = bpr.Version
    46  				break
    47  			}
    48  		}
    49  	}
    50  
    51  	return &resolvedVersion{
    52  		Requested: requested,
    53  		Resolved:  resolved,
    54  	}
    55  }