'Add watches for this directory and all its descendant directories,
recursively.'

def add_watches(self, base, top_level=True):

    base = realpath(base)
    if ((not top_level) and (base in self.watched_dirs)):
        return
    try:
        is_dir = self.add_watch(base)
    except OSError as e:
        if (e.errno == errno.ENOENT):
            if top_level:
                raise NoSuchDir(u'The    dir    {0}    does    not    exist'.format(base))
            return
        if (e.errno == errno.EACCES):
            if top_level:
                raise NoSuchDir(u'You    do    not    have    permission    to    monitor    {0}'.format(base))
            return
        raise
    else:
        if is_dir:
            try:
                files = os.listdir(base)
            except OSError as e:
                if (e.errno in (errno.ENOTDIR, errno.ENOENT)):
                    if top_level:
                        raise NoSuchDir(u'The    dir    {0}    does    not    exist'.format(base))
                    return
                raise
            for x in files:
                self.add_watches(os.path.join(base, x), top_level=False)
        elif top_level:
            raise NoSuchDir(u'The    dir    {0}    does    not    exist'.format(base))
