internal/pkg: destroy new substitution status on fault
All checks were successful
Test / Create distribution (push) Successful in 1m8s
Test / Sandbox (push) Successful in 2m54s
Test / ShareFS (push) Successful in 3m56s
Test / Hakurei (push) Successful in 4m5s
Test / Sandbox (race detector) (push) Successful in 5m44s
Test / Hakurei (race detector) (push) Successful in 7m10s
Test / Flake checks (push) Successful in 2m30s

This avoids leaving behind the substitution status path of a faulted cure.

Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
2026-05-23 01:31:13 +09:00
parent 3bd4ef616c
commit f5e9a0c04e

View File

@@ -155,7 +155,7 @@ type TContext struct {
// Target [Artifact] encoded identifier. // Target [Artifact] encoded identifier.
ids string ids string
// Pathname status was created at. // Pathname status was created at.
statusPath *check.Absolute statusPath, statusSPath *check.Absolute
// File statusHeader and logs are written to. // File statusHeader and logs are written to.
status *os.File status *os.File
// Error value during prepareStatus. // Error value during prepareStatus.
@@ -258,6 +258,11 @@ func (t *TContext) destroy(errP *error) {
), 10), ), 10),
).String(), ).String(),
)) ))
if t.statusSPath != nil {
t.cache.checksumMu.Lock()
*errP = errors.Join(*errP, os.Remove(t.statusSPath.String()))
t.cache.checksumMu.Unlock()
}
} }
t.status = nil t.status = nil
} }
@@ -1957,7 +1962,7 @@ func (c *Cache) cure(a Artifact, curesExempt bool) (
t := TContext{ t := TContext{
c.base.Append(dirWork, ids), c.base.Append(dirWork, ids),
c.base.Append(dirTemp, ids), c.base.Append(dirTemp, ids),
ids, nil, nil, nil, ids, nil, nil, nil, nil,
common{ctx, c}, common{ctx, c},
} }
switch ca := a.(type) { switch ca := a.(type) {
@@ -2049,13 +2054,19 @@ func (c *Cache) cure(a Artifact, curesExempt bool) (
} }
err = ca.Cure(&f) err = ca.Cure(&f)
if err == nil && f.status != nil { if err == nil && f.status != nil {
statusS := c.base.Append(
dirStatus,
substitutes,
)
c.checksumMu.Lock()
err = os.Link(c.base.Append( err = os.Link(c.base.Append(
dirStatus, dirStatus,
ids, ids,
).String(), c.base.Append( ).String(), statusS.String())
dirStatus, c.checksumMu.Unlock()
substitutes, if err == nil {
).String()) f.statusSPath = statusS
}
} }
c.exitCure(a, curesExempt) c.exitCure(a, curesExempt)
if err != nil { if err != nil {