internal/pkg: encode checksum in ident
All checks were successful
Test / Create distribution (push) Successful in 1m1s
Test / Sandbox (push) Successful in 2m44s
Test / Hakurei (push) Successful in 4m5s
Test / ShareFS (push) Successful in 4m17s
Test / Hpkg (push) Successful in 5m26s
Test / Sandbox (race detector) (push) Successful in 5m59s
Test / Hakurei (race detector) (push) Successful in 4m17s
Test / Flake checks (push) Successful in 1m55s

This also rearranges the ident ir to be more predictable, and avoids an obvious and somewhat easy to get into inconsistent state.

Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
2026-01-27 19:27:18 +09:00
parent f1758a6fa8
commit 968d8dbaf1
8 changed files with 89 additions and 76 deletions

View File

@@ -589,12 +589,21 @@ func (c *Cache) unsafeIdent(a Artifact, encodeKind bool) (
h := sha512.New384()
binary.LittleEndian.PutUint64(buf[:], uint64(a.Kind()))
h.Write(buf[:wordSize])
i := IContext{c, h}
a.Params(&i)
i.cache, i.h = nil, nil
for _, dn := range idents {
h.Write(dn[:])
}
kcBuf := c.getIdentBuf()
if kc, ok := a.(KnownChecksum); ok {
*(*Checksum)(kcBuf[:]) = kc.Checksum()
} else {
*(*Checksum)(kcBuf[:]) = Checksum{}
}
h.Write((*Checksum)(kcBuf[:])[:])
c.putIdentBuf(kcBuf)
i := IContext{c, h}
a.Params(&i)
i.cache, i.h = nil, nil
h.Sum(buf[wordSize:wordSize])
return