aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--internal/rosa/all.go26
1 files changed, 15 insertions, 11 deletions
diff --git a/internal/rosa/all.go b/internal/rosa/all.go
index 8817fb02..d1116e88 100644
--- a/internal/rosa/all.go
+++ b/internal/rosa/all.go
@@ -256,9 +256,10 @@ var (
artifactsM [PresetEnd]Metadata
// artifacts stores the result of Metadata.f.
- artifacts [_toolchainEnd][len(artifactsM)]pkg.Artifact
- // versions stores the version of [PArtifact].
- versions [_toolchainEnd][len(artifactsM)]string
+ artifacts [_toolchainEnd][len(artifactsM)]struct {
+ a pkg.Artifact
+ v string
+ }
// artifactsOnce is for lazy initialisation of artifacts.
artifactsOnce [_toolchainEnd][len(artifactsM)]sync.Once
)
@@ -266,20 +267,23 @@ var (
// GetMetadata returns [Metadata] of a [PArtifact].
func GetMetadata(p PArtifact) *Metadata { return &artifactsM[p] }
-// Load returns the resulting [pkg.Artifact] of [PArtifact].
-func (t Toolchain) Load(p PArtifact) pkg.Artifact {
+// construct constructs a [pkg.Artifact] corresponding to a [PArtifact] once.
+func (t Toolchain) construct(p PArtifact) {
artifactsOnce[t][p].Do(func() {
- artifacts[t][p], versions[t][p] = artifactsM[p].f(t)
+ artifacts[t][p].a, artifacts[t][p].v = artifactsM[p].f(t)
})
- return artifacts[t][p]
+}
+
+// Load returns the resulting [pkg.Artifact] of [PArtifact].
+func (t Toolchain) Load(p PArtifact) pkg.Artifact {
+ t.construct(p)
+ return artifacts[t][p].a
}
// Version returns the version string of [PArtifact].
func (t Toolchain) Version(p PArtifact) string {
- artifactsOnce[t][p].Do(func() {
- artifacts[t][p], versions[t][p] = artifactsM[p].f(t)
- })
- return versions[t][p]
+ t.construct(p)
+ return artifacts[t][p].v
}
// ResolveName returns a [PArtifact] by name.