<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def set_roles_file(self, path):
 """ Load all roles from the roles file, and watch for future role changes. When the roles file changes, it will be read and the current configuration re-applied so that any role-induced changes are processed. Once loaded, the roles are presented as a set. If there is no role file, the role set is None and role processing is inhibited (all tasks are in scope). If the file exists but is empty, then the role set is the empty set, and only tasks with no role list will be in scope. Otherwise the contents is parsed as a set of roles, one per line. """

        log = self._params.get('log', self._discard)
        if path != self._roles_file:
            if self._roles_file:
                log.info("Roles file changed from '%s' to '%s'", self._config_file, path)
                self.file_del(self, paths=[self._roles_file])
            else:
                log.info("Roles file set to '%s'", path)
            self._roles_file = path
            self.file_add(event_target(self, 'legion_config', log=log), path)
        return self._load_roles()