aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/pkg/pkg.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/pkg/pkg.go')
-rw-r--r--internal/pkg/pkg.go34
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
+ }
}
}