Fix CombineErrors and fillExtendedAttr error handling

This commit is contained in:
Aneesh Nireshwalia 2024-02-24 13:22:34 -07:00
parent 09ce1b4e58
commit e3e59fef24
No known key found for this signature in database
GPG key ID: 6F5A52831C046F44
2 changed files with 18 additions and 16 deletions

View file

@ -43,22 +43,29 @@ func Is(x, y error) bool { return stderrors.Is(x, y) }
// unwrap errors returned by [Join].
func Unwrap(err error) error { return stderrors.Unwrap(err) }
// CombineErrors combines multiple errors into a single error.
func CombineErrors(errors ...error) error {
// 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
for _, err := range errors {
if err != nil {
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 += err.Error()
combinedErrorMsg += errVal.Error()
}
}
if combinedErrorMsg == "" {
return nil // No errors, return nil
return nil // If no errors, return nil
} else if !multipleErrors {
return err // If only one error, return that first error
} else {
return fmt.Errorf("multiple errors occurred: [%s]", combinedErrorMsg)
}
return fmt.Errorf("multiple errors occurred: [%s]", combinedErrorMsg)
}

View file

@ -719,12 +719,7 @@ func (node *Node) fillExtra(path string, fi os.FileInfo) error {
allowExtended, err := node.fillGenericAttributes(path, fi, stat)
if allowExtended {
// Skip processing ExtendedAttributes if allowExtended is false.
errEx := node.fillExtendedAttributes(path)
if err == nil {
err = errEx
} else {
debug.Log("Error filling extended attributes for %v at %v : %v", node.Name, path, errEx)
}
err = errors.CombineErrors(err, node.fillExtendedAttributes(path))
}
return err
}