Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changes/20250801093542.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
:bug: `filsystem` Unlink files before attempting to remove them in Remove
1 change: 1 addition & 0 deletions changes/20250801105019.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
:sparkles: `commonerrors` Add IgnoreCorrespondTo function
8 changes: 8 additions & 0 deletions utils/commonerrors/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,14 @@ func Ignore(target error, ignore ...error) error {
return target
}

// IgnoreCorrespondTo will return nil if the target error matches one of the descriptions of errors to ignore
func IgnoreCorrespondTo(target error, ignore ...string) error {
if CorrespondTo(target, ignore...) {
return nil
}
return target
}

// IsEmpty states whether an error is empty or not.
// An error is considered empty if it is `nil` or has no description.
func IsEmpty(err error) bool {
Expand Down
7 changes: 7 additions & 0 deletions utils/commonerrors/errors_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,13 @@ func TestCorrespondTo(t *testing.T) {
assert.True(t, CorrespondTo(fmt.Errorf("%v %v", faker.Sentence(), strings.ToUpper(ErrUndefined.Error())), strings.ToLower(ErrUndefined.Error())))
}

func TestIgnoreCorrespondTo(t *testing.T) {
assert.NoError(t, IgnoreCorrespondTo(errors.New("test"), "test"))
assert.NoError(t, IgnoreCorrespondTo(errors.New("test 123"), "test"))
assert.Error(t, IgnoreCorrespondTo(errors.New("test 123"), "abc", "def", faker.Word()))
assert.NoError(t, IgnoreCorrespondTo(ErrCondition, "condition"))
}

func TestContextErrorConversion(t *testing.T) {
defer goleak.VerifyNone(t)
task := func(ctx context.Context) {
Expand Down
10 changes: 6 additions & 4 deletions utils/filesystem/extendedosfs.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,15 @@ type ExtendedOsFs struct {
}

func (c *ExtendedOsFs) Remove(name string) (err error) {
err = commonerrors.Ignore(ConvertFileSystemError(c.OsFs.Remove(name)), commonerrors.ErrNotFound)
if err != nil {
return
}
// The following is to ensure sockets are correctly removed
// https://stackoverflow.com/questions/16681944/how-to-reliably-unlink-a-unix-domain-socket-in-go-programming-language
err = commonerrors.Ignore(ConvertFileSystemError(syscall.Unlink(name)), commonerrors.ErrNotFound)
err = commonerrors.IgnoreCorrespondTo(err, "is a directory")
if err != nil {
return
}

err = commonerrors.Ignore(ConvertFileSystemError(c.OsFs.Remove(name)), commonerrors.ErrNotFound)
return
}

Expand Down
Loading