internal/pkg: populate substitute status
All checks were successful
Test / Create distribution (push) Successful in 1m5s
Test / Sandbox (push) Successful in 3m8s
Test / Hakurei (push) Successful in 5m36s
Test / ShareFS (push) Successful in 5m37s
Test / Sandbox (race detector) (push) Successful in 6m58s
Test / Hakurei (race detector) (push) Successful in 9m44s
Test / Flake checks (push) Successful in 1m28s

These are not created when taking the fast path, but should be inherited from the alternative.

Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
2026-05-13 16:16:37 +09:00
parent 19555c7670
commit 32fef12ac2
2 changed files with 29 additions and 2 deletions

View File

@@ -1995,10 +1995,11 @@ func (c *Cache) cure(a Artifact, curesExempt bool) (
buf := c.getIdentBuf() buf := c.getIdentBuf()
sh.Sum(buf[wordSize:wordSize]) sh.Sum(buf[wordSize:wordSize])
substitute = unique.Make(ID(buf[wordSize:])) substitute = unique.Make(ID(buf[wordSize:]))
substitutes := Encode(substitute.Value())
c.putIdentBuf(buf) c.putIdentBuf(buf)
alternative = c.base.Append( alternative = c.base.Append(
dirSubstitute, dirSubstitute,
Encode(substitute.Value()), substitutes,
) )
if c.flags&CIgnoreSubstitutes == 0 { if c.flags&CIgnoreSubstitutes == 0 {
@@ -2014,6 +2015,17 @@ func (c *Cache) cure(a Artifact, curesExempt bool) (
dirChecksum, dirChecksum,
checksums, checksums,
) )
if _, err = os.Lstat(c.base.Append(
dirStatus,
substitutes,
).String()); err == nil {
err = os.Symlink(substitutes, c.base.Append(
dirStatus,
ids,
).String())
} else if errors.Is(err, os.ErrNotExist) {
err = nil
}
return return
} }
} }
@@ -2023,6 +2035,15 @@ func (c *Cache) cure(a Artifact, curesExempt bool) (
return return
} }
err = ca.Cure(&f) err = ca.Cure(&f)
if err == nil && f.status != nil {
err = os.Link(c.base.Append(
dirStatus,
ids,
).String(), c.base.Append(
dirStatus,
substitutes,
).String())
}
c.exitCure(a, curesExempt) c.exitCure(a, curesExempt)
if err != nil { if err != nil {
return return

View File

@@ -1059,8 +1059,14 @@ func TestCache(t *testing.T) {
"_EmV5nsYZ2UWHgRmLDMU8i-rJWDx-kv5_1pFrzQI7vMMCM5mAXivO8UZtVfOqMR_", "_EmV5nsYZ2UWHgRmLDMU8i-rJWDx-kv5_1pFrzQI7vMMCM5mAXivO8UZtVfOqMR_",
), want, nil}, ), want, nil},
}) })
} }
if dents, err := os.ReadDir(base.Append("status").String()); err != nil {
t.Fatal(err)
} else if len(dents) > 0 {
t.Errorf("ReadDir: %v", dents)
}
}, expectsFS{ }, expectsFS{
".": {Mode: fs.ModeDir | 0700}, ".": {Mode: fs.ModeDir | 0700},