taskmaster icon indicating copy to clipboard operation
taskmaster copied to clipboard

DeleteTask should wrap error to detect IsNotExist errors

Open maja42 opened this issue 2 years ago • 1 comments

It's currently not possible to check if a task actually exists. I'd like to delete a task, and if it does not exist I want to ignore the error. Usually this can be done by checking os.IsNotExist(err). However, taskService.DeleteTask wraps the underlying OS error with the verb %v, which effectively loses type information:

return fmt.Errorf("error deleting task %s: %v", path, getTaskSchedulerError(err))

Taskmaster should use %w instead.

I could also try something with GetRegisteredTask, but the goDoc doesn't really make sense:

// GetRegisteredTask attempts to find the specified registered task and returns a // pointer to it if it exists. If it doesn't exist, nil will be returned in place of // the registered task.

The return type is a struct, it can't be nil. I also can't compare it with the struct's zero-value, because the struct is not comparable due to the embedded *ole.IDispatch. But that doesn't matter, because GetRegisteredTask also returns an error - the same one as DeleteTask.

Right now, the only way I can check for this scenario is by comparing error messages - which is pretty fragile, considering that windows likes to translate error messages.

maja42 avatar Aug 10 '21 14:08 maja42

I originally wrote taskmaster right around when Go 1.13 was released, so I wasn't familiar with the new errors api at the time. I agree that errors should be wrapped correctly though.

capnspacehook avatar Aug 21 '21 16:08 capnspacehook