From 2b609d3e77bbaacbde8d1a5cfc3bcc688bd98dc3 Mon Sep 17 00:00:00 2001 From: greatroar <61184462+greatroar@users.noreply.github.com> Date: Thu, 3 Oct 2024 21:39:35 +0200 Subject: [PATCH] errors, fs: Replace CombineErrors with stdlib Join This does not produce exactly the same messages, as it inserts newlines instead of "; ". But given how long our error messages can be, that might be a good thing. --- internal/errors/errors.go | 29 ++--------------------------- internal/fs/node.go | 2 +- internal/fs/node_windows.go | 2 +- 3 files changed, 4 insertions(+), 29 deletions(-) diff --git a/internal/errors/errors.go b/internal/errors/errors.go index ca36611eb..96e5b82bb 100644 --- a/internal/errors/errors.go +++ b/internal/errors/errors.go @@ -2,7 +2,6 @@ package errors import ( stderrors "errors" - "fmt" "github.com/pkg/errors" ) @@ -36,35 +35,11 @@ func As(err error, tgt interface{}) bool { return stderrors.As(err, tgt) } // Is reports whether any error in err's tree matches target. func Is(x, y error) bool { return stderrors.Is(x, y) } +func Join(errs ...error) error { return stderrors.Join(errs...) } + // Unwrap returns the result of calling the Unwrap method on err, if err's type contains // an Unwrap method returning error. Otherwise, Unwrap returns nil. // // Unwrap only calls a method of the form "Unwrap() error". In particular Unwrap does not // unwrap errors returned by [Join]. func Unwrap(err error) error { return stderrors.Unwrap(err) } - -// CombineErrors combines multiple errors into a single error after filtering out any nil values. -// If no errors are passed, it returns nil. -// If one error is passed, it simply returns that same error. -func CombineErrors(errors ...error) (err error) { - var combinedErrorMsg string - var multipleErrors bool - for _, errVal := range errors { - if errVal != nil { - if combinedErrorMsg != "" { - combinedErrorMsg += "; " // Separate error messages with a delimiter - multipleErrors = true - } else { - // Set the first error - err = errVal - } - combinedErrorMsg += errVal.Error() - } - } - if combinedErrorMsg == "" { - return nil // If no errors, return nil - } else if !multipleErrors { - return err // If only one error, return that first error - } - return fmt.Errorf("multiple errors occurred: [%s]", combinedErrorMsg) -} diff --git a/internal/fs/node.go b/internal/fs/node.go index a5ca1654a..f6bf18087 100644 --- a/internal/fs/node.go +++ b/internal/fs/node.go @@ -103,7 +103,7 @@ func nodeFillExtra(node *restic.Node, path string, fi os.FileInfo, ignoreXattrLi allowExtended, err := nodeFillGenericAttributes(node, path, &stat) if allowExtended { // Skip processing ExtendedAttributes if allowExtended is false. - err = errors.CombineErrors(err, nodeFillExtendedAttributes(node, path, ignoreXattrListError)) + err = errors.Join(err, nodeFillExtendedAttributes(node, path, ignoreXattrListError)) } return err } diff --git a/internal/fs/node_windows.go b/internal/fs/node_windows.go index 9d46143cc..0c1bf0365 100644 --- a/internal/fs/node_windows.go +++ b/internal/fs/node_windows.go @@ -189,7 +189,7 @@ func nodeRestoreGenericAttributes(node *restic.Node, path string, warn func(msg } restic.HandleUnknownGenericAttributesFound(unknownAttribs, warn) - return errors.CombineErrors(errs...) + return errors.Join(errs...) } // genericAttributesToWindowsAttrs converts the generic attributes map to a WindowsAttributes and also returns a string of unknown attributes that it could not convert.