github.com/turbot/steampipe@v1.7.0-rc.0.0.20240517123944-7cef272d4458/pkg/modinstaller/resolved_mod_ref.go (about)

     1  package modinstaller
     2  
     3  import (
     4  	"github.com/Masterminds/semver/v3"
     5  	"github.com/go-git/go-git/v5/plumbing"
     6  	"github.com/turbot/steampipe/pkg/steampipeconfig/modconfig"
     7  	"github.com/turbot/steampipe/pkg/versionhelpers"
     8  )
     9  
    10  // ResolvedModRef is a struct to represent a resolved mod git reference
    11  type ResolvedModRef struct {
    12  	// the FQN of the mod - also the Git URL of the mod repo
    13  	Name string
    14  	// the mod version
    15  	Version *semver.Version
    16  	// the vestion constraint
    17  	Constraint *versionhelpers.Constraints
    18  	// the Git branch/tag
    19  	GitReference plumbing.ReferenceName
    20  	// the file path for local mods
    21  	FilePath string
    22  }
    23  
    24  func NewResolvedModRef(requiredModVersion *modconfig.ModVersionConstraint, version *semver.Version) (*ResolvedModRef, error) {
    25  	res := &ResolvedModRef{
    26  		Name:       requiredModVersion.Name,
    27  		Version:    version,
    28  		Constraint: requiredModVersion.Constraint,
    29  		// this may be empty strings
    30  		FilePath: requiredModVersion.FilePath,
    31  	}
    32  	if res.FilePath == "" {
    33  		res.setGitReference()
    34  	}
    35  
    36  	return res, nil
    37  }
    38  
    39  func (r *ResolvedModRef) setGitReference() {
    40  	// TODO handle branches
    41  
    42  	// NOTE: use the original version string - this will be the tag name
    43  	r.GitReference = plumbing.NewTagReferenceName(r.Version.Original())
    44  }
    45  
    46  // DependencyPath returns name in the format <dependency name>@v<dependencyVersion>
    47  func (r *ResolvedModRef) DependencyPath() string {
    48  	return modconfig.BuildModDependencyPath(r.Name, r.Version)
    49  }