diff options
Diffstat (limited to 'internal/pkg/pkg.go')
| -rw-r--r-- | internal/pkg/pkg.go | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/internal/pkg/pkg.go b/internal/pkg/pkg.go index 0c882bea..ccb7541e 100644 --- a/internal/pkg/pkg.go +++ b/internal/pkg/pkg.go @@ -507,6 +507,20 @@ const ( // CSchedIdle arranges for the [ext.SCHED_IDLE] scheduling priority to be // set for [KindExec] and [KindExecNet] containers. CSchedIdle + + // CAssumeChecksum enables the use of [KnownChecksum] for duplicate function + // call suppression via the on-disk cache. + // + // This may cause incorrect cure outcome if an impossible checksum is + // specified that matches an output already present in the on-disk cache. + // This may be avoided by purposefully specifying a statistically + // unattainable checksum, like the zero value. + // + // While this optimisation might seem appealing, it is almost never + // applicable in real world use. Almost every time this path was taken, it + // was caused by an incorrect checksum accidentally left behind while + // bumping a package. Only enable this if you are really sure you need it. + CAssumeChecksum ) // Cache is a support layer that implementations of [Artifact] can use to store @@ -1041,7 +1055,7 @@ func (c *Cache) finaliseIdent( // [FileArtifact] to the filesystem. If err is nil, the caller is responsible // for closing the resulting [io.ReadCloser]. func (c *Cache) openFile(f FileArtifact) (r io.ReadCloser, err error) { - if kc, ok := f.(KnownChecksum); ok { + if kc, ok := f.(KnownChecksum); c.flags&CAssumeChecksum != 0 && ok { c.checksumMu.RLock() r, err = os.Open(c.base.Append( dirChecksum, @@ -1484,16 +1498,18 @@ func (c *Cache) cure(a Artifact, curesExempt bool) ( checksums, ) - c.checksumMu.RLock() - checksumFi, err = os.Stat(checksumPathname.String()) - c.checksumMu.RUnlock() + if c.flags&CAssumeChecksum != 0 { + c.checksumMu.RLock() + checksumFi, err = os.Stat(checksumPathname.String()) + c.checksumMu.RUnlock() - if err != nil { - if !errors.Is(err, os.ErrNotExist) { - return - } + if err != nil { + if !errors.Is(err, os.ErrNotExist) { + return + } - checksumFi, err = nil, nil + checksumFi, err = nil, nil + } } } |
