From 32fef12ac2cdd15b7db4235763c172f1d09bba70 Mon Sep 17 00:00:00 2001 From: Ophestra Date: Wed, 13 May 2026 16:16:37 +0900 Subject: [PATCH] internal/pkg: populate substitute status These are not created when taking the fast path, but should be inherited from the alternative. Signed-off-by: Ophestra --- internal/pkg/pkg.go | 23 ++++++++++++++++++++++- internal/pkg/pkg_test.go | 8 +++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/internal/pkg/pkg.go b/internal/pkg/pkg.go index 03528cc0..0a326171 100644 --- a/internal/pkg/pkg.go +++ b/internal/pkg/pkg.go @@ -1995,10 +1995,11 @@ func (c *Cache) cure(a Artifact, curesExempt bool) ( buf := c.getIdentBuf() sh.Sum(buf[wordSize:wordSize]) substitute = unique.Make(ID(buf[wordSize:])) + substitutes := Encode(substitute.Value()) c.putIdentBuf(buf) alternative = c.base.Append( dirSubstitute, - Encode(substitute.Value()), + substitutes, ) if c.flags&CIgnoreSubstitutes == 0 { @@ -2014,6 +2015,17 @@ func (c *Cache) cure(a Artifact, curesExempt bool) ( dirChecksum, 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 } } @@ -2023,6 +2035,15 @@ func (c *Cache) cure(a Artifact, curesExempt bool) ( return } 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) if err != nil { return diff --git a/internal/pkg/pkg_test.go b/internal/pkg/pkg_test.go index 9d6757c7..96eda8ad 100644 --- a/internal/pkg/pkg_test.go +++ b/internal/pkg/pkg_test.go @@ -1059,8 +1059,14 @@ func TestCache(t *testing.T) { "_EmV5nsYZ2UWHgRmLDMU8i-rJWDx-kv5_1pFrzQI7vMMCM5mAXivO8UZtVfOqMR_", ), 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{ ".": {Mode: fs.ModeDir | 0700},