taskmaster
taskmaster copied to clipboard
DeleteTask should wrap error to detect IsNotExist errors
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.
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.