From af038c89ffe01f4b07ab94030fa83baa8d5f83d9 Mon Sep 17 00:00:00 2001 From: Ophestra Date: Thu, 26 Mar 2026 14:10:35 +0900 Subject: [PATCH] internal/pkg: collection helper-artifact This was moved from internal/rosa because it is considered generally useful. Signed-off-by: Ophestra --- cmd/mbf/main.go | 4 ++-- internal/pkg/pkg.go | 37 ++++++++++++++++++++++++++++++++++++- internal/rosa/rosa.go | 29 ----------------------------- 3 files changed, 38 insertions(+), 32 deletions(-) diff --git a/cmd/mbf/main.go b/cmd/mbf/main.go index 70a7f19e..199ad3da 100644 --- a/cmd/mbf/main.go +++ b/cmd/mbf/main.go @@ -527,7 +527,7 @@ func main() { } presets[i] = p } - root := make(rosa.Collect, 0, 6+len(args)) + root := make(pkg.Collect, 0, 6+len(args)) root = rosa.Std.AppendPresets(root, presets...) if flagWithToolchain { @@ -543,7 +543,7 @@ func main() { if _, _, err := cache.Cure(&root); err == nil { return errors.New("unreachable") - } else if !errors.Is(err, rosa.Collected{}) { + } else if !pkg.IsCollected(err) { return err } diff --git a/internal/pkg/pkg.go b/internal/pkg/pkg.go index 995357e8..9a8dc9fd 100644 --- a/internal/pkg/pkg.go +++ b/internal/pkg/pkg.go @@ -366,7 +366,7 @@ type TrivialArtifact interface { } // KnownIdent is optionally implemented by [Artifact] and is used instead of -// [Kind.Ident] when it is available. +// [Cache.Ident] when it is available. // // This is very subtle to use correctly. The implementation must ensure that // this value is globally unique, otherwise [Cache] can enter an inconsistent @@ -439,6 +439,11 @@ const ( KindCustomOffset = 1 << 31 ) +const ( + // kindCollection is the kind of [Collect]. It never cures successfully. + kindCollection Kind = KindCustomOffset - 1 - iota +) + const ( // fileLock is the file name appended to Cache.base for guaranteeing // exclusive access to the cache directory. @@ -1890,3 +1895,33 @@ func open( return &c, nil } + +// Collected is returned by [Collect.Cure] to indicate a successful collection. +type Collected struct{} + +// Error returns a constant string to satisfy error, but should never be seen +// by the user. +func (Collected) Error() string { return "artifacts successfully collected" } + +// IsCollected returns whether the underlying error contains that of the result +// of curing a [Collect] helper. +func IsCollected(err error) bool { return errors.As(err, new(Collected)) } + +// Collect implements [pkg.FloodArtifact] to concurrently cure multiple +// [pkg.Artifact]. It returns [Collected]. +type Collect []Artifact + +// Cure returns [Collected]. +func (*Collect) Cure(*FContext) error { return Collected{} } + +// Kind returns the hardcoded [pkg.Kind] value. +func (*Collect) Kind() Kind { return kindCollection } + +// Params is a noop: dependencies are already represented in the header. +func (*Collect) Params(*IContext) {} + +// Dependencies returns [Collect] as is. +func (c *Collect) Dependencies() []Artifact { return *c } + +// IsExclusive returns false: Cure is a noop. +func (*Collect) IsExclusive() bool { return false } diff --git a/internal/rosa/rosa.go b/internal/rosa/rosa.go index 47ccddab..51de7648 100644 --- a/internal/rosa/rosa.go +++ b/internal/rosa/rosa.go @@ -20,9 +20,6 @@ const ( // kindBusyboxBin is the kind of [pkg.Artifact] of busyboxBin. kindBusyboxBin - - // kindCollection is the kind of [Collect]. It never cures successfully. - kindCollection ) // mustDecode is like [pkg.MustDecode], but replaces the zero value and prints @@ -591,29 +588,3 @@ cd '/usr/src/` + name + `/' })..., ) } - -// Collected is returned by [Collect.Cure] to indicate a successful collection. -type Collected struct{} - -// Error returns a constant string to satisfy error, but should never be seen -// by the user. -func (Collected) Error() string { return "artifacts successfully collected" } - -// Collect implements [pkg.FloodArtifact] to concurrently cure multiple -// [pkg.Artifact]. It returns [Collected]. -type Collect []pkg.Artifact - -// Cure returns [Collected]. -func (*Collect) Cure(*pkg.FContext) error { return Collected{} } - -// Kind returns the hardcoded [pkg.Kind] value. -func (*Collect) Kind() pkg.Kind { return kindCollection } - -// Params does not write anything, dependencies are already represented in the header. -func (*Collect) Params(*pkg.IContext) {} - -// Dependencies returns [Collect] as is. -func (c *Collect) Dependencies() []pkg.Artifact { return *c } - -// IsExclusive returns false: Cure is a noop. -func (*Collect) IsExclusive() bool { return false }