'Watch the \'mask\' events in given path. Can raise C{INotifyError} when
there\'s a problem while adding a directory.
@param path: The path needing monitoring
@type path: L{FilePath}
@param mask: The events that should be watched
@type mask: L{int}
@param autoAdd: if True automatically add newly created
subdirectories
@type autoAdd: L{bool}
@param callbacks: A list of callbacks that should be called
when an event happens in the given path.
The callback should accept 3 arguments:
(ignored, filepath, mask)
@type callbacks: L{list} of callables
@param recursive: Also add all the subdirectories in this path
@type recursive: L{bool}'

def watch(self, path, mask=IN_WATCH_MASK, autoAdd=False, callbacks=None, recursive=False):

    if recursive:
        for child in path.walk():
            if child.isdir():
                self.watch(child, mask, autoAdd, callbacks, recursive=False)
    else:
        wd = self._isWatched(path)
        if wd:
            return wd
        mask = (mask | IN_DELETE_SELF)
        return self._addWatch(path, mask, autoAdd, callbacks)
