diff options
| author | Ophestra <cat@gensokyo.uk> | 2026-05-19 20:47:34 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2026-05-19 21:40:15 +0900 |
| commit | 962b02cf259403d25505983cc5e11cbc2993e224 (patch) | |
| tree | 615c0ffec34382914ad6244907badcc8b80182b8 /internal/rosa/state.go | |
| parent | 6fd6d971ed5251cf8b1114e142dacd3a2e8c4a44 (diff) | |
internal/rosa/package: migrate kernel
This introduces bindings for extra paths and KnownChecksum, and exposes a passthrough special case.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/rosa/state.go')
| -rw-r--r-- | internal/rosa/state.go | 86 |
1 files changed, 67 insertions, 19 deletions
diff --git a/internal/rosa/state.go b/internal/rosa/state.go index 78da6817..cdda2127 100644 --- a/internal/rosa/state.go +++ b/internal/rosa/state.go @@ -53,6 +53,9 @@ func (handle *ArtifactH) UnmarshalJSON(data []byte) error { type HandleError ArtifactH func (e HandleError) Error() string { + if e == (HandleError{}) { + return "invalid handle error" + } return "package " + strconv.Quote(ArtifactH(e).String()) + " not available" } @@ -763,10 +766,13 @@ func (ctx *evalContext) pf( var ( attr PackageAttr patches []string + files []string excl bool early bool anitya int64 + kc any + output pkg.Artifact sourceA any helper Helper @@ -787,13 +793,16 @@ func (ctx *evalContext) pf( k("env"): &attr.Env, k("early"): &attr.ScriptEarly, k("patches"): &patches, + k("files"): &files, k("exclusive"): &excl, k("toyboxEarly"): &early, - k("source"): &sourceA, - k("exec"): &helper, - k("inputs"): &inputs, - k("runtime"): &runtimes, + k("checksum"): &kc, + k("output"): &output, + k("source"): &sourceA, + k("exec"): &helper, + k("inputs"): &inputs, + k("runtime"): &runtimes, k("anityaFallback"): &anityaFallback, k("anityaLegacyCPAN"): &anityaLegacyCPAN, @@ -807,6 +816,31 @@ func (ctx *evalContext) pf( return } + meta.ID = int(anitya) + if anityaFallback { + meta.latest = (*Versions).getStable + } else if anityaLegacyCPAN { + meta.latest = func(v *Versions) string { + for _, s := range v.Stable { + _, m, ok := strings.Cut(s, ".") + if !ok { + continue + } + if len(m) > 1 && m[0] == '0' { + continue + } + return s + } + return v.Latest + } + } + + if output != nil { + v = cachedArtifact{&meta, output} + set = true + return + } + for _, pathname := range patches { var p []byte p, err = fs.ReadFile(ctx.b, pathname) @@ -818,6 +852,26 @@ func (ctx *evalContext) pf( unsafe.String(unsafe.SliceData(p), len(p)), }) } + + for _, pair := range files { + base, pathname, ok := strings.Cut(pair, ":") + if !ok { + pathname, base = base, filepath.Base(base) + } + + var p []byte + p, err = fs.ReadFile(ctx.b, pathname) + if err != nil { + return + } + + attr.Paths = append(attr.Paths, pkg.Path( + AbsUsrSrc.Append(base), + false, + pkg.NewFile(base, p), + )) + } + if excl { attr.Flag |= TExclusive } @@ -825,24 +879,18 @@ func (ctx *evalContext) pf( attr.Flag |= TEarly } - meta.ID = int(anitya) - if anityaFallback { - meta.latest = (*Versions).getStable - } else if anityaLegacyCPAN { - meta.latest = func(v *Versions) string { - for _, s := range v.Stable { - _, m, ok := strings.Cut(s, ".") - if !ok { - continue - } - if len(m) > 1 && m[0] == '0' { - continue - } - return s + if kc != nil { + checksum, ok := kc.(string) + if !ok { + err = azalea.TypeError{ + Concrete: reflect.TypeOf(checksum), + Asserted: reflect.TypeFor[string](), } - return v.Latest + return } + attr.KnownChecksum = new(mustDecode(checksum)) } + var source pkg.Artifact switch p := sourceA.(type) { case pkg.Artifact: |
