aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/rosa/state.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/rosa/state.go')
-rw-r--r--internal/rosa/state.go86
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: