Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 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 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