diff options
Diffstat (limited to 'internal/pkg/pkg.go')
| -rw-r--r-- | internal/pkg/pkg.go | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/internal/pkg/pkg.go b/internal/pkg/pkg.go index 1ecd4b5c..b2eceb25 100644 --- a/internal/pkg/pkg.go +++ b/internal/pkg/pkg.go @@ -188,6 +188,10 @@ func (c *common) Unwrap() context.Context { return c.cache.ctx } // GetMessage returns [message.Msg] held by the underlying [Cache]. func (c *common) GetMessage() message.Msg { return c.cache.msg } +// GetJobs returns the preferred number of jobs to run, when applicable. Its +// value must not affect cure outcome. +func (c *common) GetJobs() int { return c.cache.jobs } + // GetWorkDir returns a pathname to a directory which [Artifact] is expected to // write its output to. This is not the final resting place of the [Artifact] // and this pathname should not be directly referred to in the final contents. @@ -552,6 +556,8 @@ type Cache struct { base *check.Absolute // Immutable cure options set by [Open]. flags int + // Immutable job count, when applicable. + jobs int // Artifact to [unique.Handle] of identifier cache. artifact sync.Map @@ -1818,7 +1824,7 @@ func (c *Cache) Close() { // caller-supplied value, however direct calls to [Cache.Cure] is not subject // to this limitation. // -// A cures value of 0 or lower is equivalent to the value returned by +// A cures or jobs value of 0 or lower is equivalent to the value returned by // [runtime.NumCPU]. // // A successful call to Open guarantees exclusive access to the on-filesystem @@ -1828,10 +1834,10 @@ func (c *Cache) Close() { func Open( ctx context.Context, msg message.Msg, - flags, cures int, + flags, cures, jobs int, base *check.Absolute, ) (*Cache, error) { - return open(ctx, msg, flags, cures, base, true) + return open(ctx, msg, flags, cures, jobs, base, true) } // open implements Open but allows omitting the [lockedfile] lock when called @@ -1839,13 +1845,16 @@ func Open( func open( ctx context.Context, msg message.Msg, - flags, cures int, + flags, cures, jobs int, base *check.Absolute, lock bool, ) (*Cache, error) { if cures < 1 { cures = runtime.NumCPU() } + if jobs < 1 { + jobs = runtime.NumCPU() + } for _, name := range []string{ dirIdentifier, @@ -1862,6 +1871,7 @@ func open( c := Cache{ cures: make(chan struct{}, cures), flags: flags, + jobs: jobs, msg: msg, base: base, |
