internal/pkg: split off context common
All checks were successful
Test / Create distribution (push) Successful in 1m1s
Test / Sandbox (push) Successful in 2m49s
Test / Hakurei (push) Successful in 4m1s
Test / ShareFS (push) Successful in 4m2s
Test / Hpkg (push) Successful in 4m37s
Test / Sandbox (race detector) (push) Successful in 5m3s
Test / Hakurei (race detector) (push) Successful in 48s
Test / Flake checks (push) Successful in 1m53s
All checks were successful
Test / Create distribution (push) Successful in 1m1s
Test / Sandbox (push) Successful in 2m49s
Test / Hakurei (push) Successful in 4m1s
Test / ShareFS (push) Successful in 4m2s
Test / Hpkg (push) Successful in 4m37s
Test / Sandbox (race detector) (push) Successful in 5m3s
Test / Hakurei (race detector) (push) Successful in 48s
Test / Flake checks (push) Successful in 1m53s
For making these methods available to RContext. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
@@ -65,18 +65,23 @@ func MustDecode(s string) (checksum Checksum) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// common holds elements and receives methods shared between different contexts.
|
||||||
|
type common struct {
|
||||||
|
// Address of underlying [Cache], should be zeroed or made unusable after
|
||||||
|
// Cure returns and must not be exposed directly.
|
||||||
|
cache *Cache
|
||||||
|
}
|
||||||
|
|
||||||
// TContext is passed to [TrivialArtifact.Cure] and provides information and
|
// TContext is passed to [TrivialArtifact.Cure] and provides information and
|
||||||
// methods required for curing the [TrivialArtifact].
|
// methods required for curing the [TrivialArtifact].
|
||||||
//
|
//
|
||||||
// Methods of TContext are safe for concurrent use. TContext is valid
|
// Methods of TContext are safe for concurrent use. TContext is valid
|
||||||
// until [TrivialArtifact.Cure] returns.
|
// until [TrivialArtifact.Cure] returns.
|
||||||
type TContext struct {
|
type TContext struct {
|
||||||
// Address of underlying [Cache], should be zeroed or made unusable after
|
|
||||||
// [TrivialArtifact.Cure] returns and must not be exposed directly.
|
|
||||||
cache *Cache
|
|
||||||
|
|
||||||
// Populated during [Cache.Cure].
|
// Populated during [Cache.Cure].
|
||||||
work, temp *check.Absolute
|
work, temp *check.Absolute
|
||||||
|
|
||||||
|
common
|
||||||
}
|
}
|
||||||
|
|
||||||
// destroy destroys the temporary directory and joins its errors with the error
|
// destroy destroys the temporary directory and joins its errors with the error
|
||||||
@@ -104,10 +109,10 @@ func (t *TContext) destroy(errP *error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Unwrap returns the underlying [context.Context].
|
// Unwrap returns the underlying [context.Context].
|
||||||
func (t *TContext) Unwrap() context.Context { return t.cache.ctx }
|
func (c *common) Unwrap() context.Context { return c.cache.ctx }
|
||||||
|
|
||||||
// GetMessage returns [message.Msg] held by the underlying [Cache].
|
// GetMessage returns [message.Msg] held by the underlying [Cache].
|
||||||
func (t *TContext) GetMessage() message.Msg { return t.cache.msg }
|
func (c *common) GetMessage() message.Msg { return c.cache.msg }
|
||||||
|
|
||||||
// GetWorkDir returns a pathname to a directory which [Artifact] is expected to
|
// 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]
|
// write its output to. This is not the final resting place of the [Artifact]
|
||||||
@@ -126,13 +131,13 @@ func (t *TContext) GetTempDir() *check.Absolute { return t.temp }
|
|||||||
// If err is nil, the caller must close the resulting [io.ReadCloser] and return
|
// If err is nil, the caller must close the resulting [io.ReadCloser] and return
|
||||||
// its error, if any. Failure to read r to EOF may result in a spurious
|
// its error, if any. Failure to read r to EOF may result in a spurious
|
||||||
// [ChecksumMismatchError], or the underlying implementation may block on Close.
|
// [ChecksumMismatchError], or the underlying implementation may block on Close.
|
||||||
func (t *TContext) Open(a Artifact) (r io.ReadCloser, err error) {
|
func (c *common) Open(a Artifact) (r io.ReadCloser, err error) {
|
||||||
if f, ok := a.(FileArtifact); ok {
|
if f, ok := a.(FileArtifact); ok {
|
||||||
return t.cache.openFile(f)
|
return c.cache.openFile(f)
|
||||||
}
|
}
|
||||||
|
|
||||||
var pathname *check.Absolute
|
var pathname *check.Absolute
|
||||||
if pathname, _, err = t.cache.Cure(a); err != nil {
|
if pathname, _, err = c.cache.Cure(a); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1526,7 +1531,11 @@ func (c *Cache) cure(a Artifact, curesExempt bool) (
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
t := TContext{c, c.base.Append(dirWork, ids), c.base.Append(dirTemp, ids)}
|
t := TContext{
|
||||||
|
c.base.Append(dirWork, ids),
|
||||||
|
c.base.Append(dirTemp, ids),
|
||||||
|
common{c},
|
||||||
|
}
|
||||||
switch ca := a.(type) {
|
switch ca := a.(type) {
|
||||||
case TrivialArtifact:
|
case TrivialArtifact:
|
||||||
defer t.destroy(&err)
|
defer t.destroy(&err)
|
||||||
|
|||||||
Reference in New Issue
Block a user