diff options
Diffstat (limited to 'internal/pkg/pkg.go')
| -rw-r--r-- | internal/pkg/pkg.go | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/internal/pkg/pkg.go b/internal/pkg/pkg.go index e90bb72c..7b4c9637 100644 --- a/internal/pkg/pkg.go +++ b/internal/pkg/pkg.go @@ -238,8 +238,8 @@ func (t *TContext) destroy(errP *error) { if chmodErr != nil || removeErr != nil { *errP = errors.Join(*errP, chmodErr, removeErr) } else if errors.Is(*errP, os.ErrExist) { - var linkError *os.LinkError - if errors.As(*errP, &linkError) && linkError != nil && + if linkError, ok := errors.AsType[*os.LinkError](*errP); ok && + linkError != nil && linkError.Op == "rename" { // two artifacts may be backed by the same file *errP = nil @@ -974,36 +974,42 @@ func (e *ScrubError) Unwrap() []error { // Error returns a multi-line representation of [ScrubError]. func (e *ScrubError) Error() string { var segments []string + var buf strings.Builder + if len(e.ChecksumMismatches) > 0 { - s := "checksum mismatches:\n" + buf.Reset() + buf.WriteString("checksum mismatches:\n") for _, m := range e.ChecksumMismatches { - s += m.Error() + "\n" + buf.WriteString(m.Error() + "\n") } - segments = append(segments, s) + segments = append(segments, buf.String()) } if len(e.DanglingIdentifiers) > 0 { - s := "dangling identifiers:\n" + buf.Reset() + buf.WriteString("dangling identifiers:\n") for _, id := range e.DanglingIdentifiers { - s += Encode(id) + "\n" + buf.WriteString(Encode(id) + "\n") } - segments = append(segments, s) + segments = append(segments, buf.String()) } if len(e.DanglingStatus) > 0 { - s := "dangling status:\n" + buf.Reset() + buf.WriteString("dangling status:\n") for _, id := range e.DanglingStatus { - s += Encode(id) + "\n" + buf.WriteString(Encode(id) + "\n") } - segments = append(segments, s) + segments = append(segments, buf.String()) } if len(e.Errs) > 0 { - s := "errors during scrub:\n" + buf.Reset() + buf.WriteString("errors during scrub:\n") for pathname, errs := range e.errs { - s += " " + pathname.Value() + ":\n" + buf.WriteString(" " + pathname.Value() + ":\n") for _, err := range errs { - s += " " + err.Error() + "\n" + buf.WriteString(" " + err.Error() + "\n") } } - segments = append(segments, s) + segments = append(segments, buf.String()) } return strings.Join(segments, "\n") } |
