aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-03-26 14:10:35 +0900
committerOphestra <cat@gensokyo.uk>2026-03-26 14:11:10 +0900
commitaf038c89ffe01f4b07ab94030fa83baa8d5f83d9 (patch)
tree027ef910b73c58bf5e5d824d5859b8bbb41ca1eb
parentd2f30173cd8d635e37623cf72b4867eb0e6ddf1d (diff)
internal/pkg: collection helper-artifact
This was moved from internal/rosa because it is considered generally useful. Signed-off-by: Ophestra <cat@gensokyo.uk>
-rw-r--r--cmd/mbf/main.go4
-rw-r--r--internal/pkg/pkg.go37
-rw-r--r--internal/rosa/rosa.go29
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
@@ -440,6 +440,11 @@ const (
)
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.
fileLock = "lock"
@@ -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 }