def repos_update(self, mess, args): """ update the bot and/or plugins use : !repos update all to update everything or : !repos update core to update only the core or : !repos update repo_name repo_name ... to update selectively some repos """ git_path = which('git') if not git_path: return ('git command not found: You need to have git installed on ' 'your system to be able to install git based plugins.') directories = set() repos = self.get(REPOS, {}) core_to_update = 'all' in args or 'core' in args if core_to_update: directories.add(os.path.dirname(__file__)) if 'all' in args: directories.update([self.plugin_dir + os.sep + name for name in repos]) else: directories.update([self.plugin_dir + os.sep + name for name in set(args).intersection(set(repos))]) for d in directories: self.send(mess.getFrom(), "I am updating %s ..." % d, message_type=mess.getType()) p = subprocess.Popen([git_path, 'pull'], cwd=d, stdout=subprocess.PIPE, stderr=subprocess.PIPE) feedback = p.stdout.read().decode('utf-8') + '\n' + '-' * 50 + '\n' err = p.stderr.read().strip().decode('utf-8') if err: feedback += err + '\n' + '-' * 50 + '\n' dep_err = check_dependencies(d) if dep_err: feedback += dep_err + '\n' if p.wait(): self.send(mess.getFrom(), "Update of %s failed...\n\n%s\n\n resuming..." % (d, feedback), message_type=mess.getType()) else: self.send(mess.getFrom(), "Update of %s succeeded...\n\n%s\n\n" % (d, feedback), message_type=mess.getType()) if not core_to_update: for plugin in get_all_plugins(): if plugin.path.startswith(d) and hasattr(plugin, 'is_activated') and plugin.is_activated: name = plugin.name self.send(mess.getFrom(), '/me is reloading plugin %s' % name) reload_plugin_by_name(plugin.name) self.activate_plugin(plugin.name) self.send(mess.getFrom(), '%s reloaded and reactivated' % name) if core_to_update: self.restart(mess, '') return "You have updated the core, I need to restart." return "Done."
def repos_update(self, mess, args): """ update the bot and/or plugins use : !repos update all to update everything or : !repos update core to update only the core or : !repos update repo_name repo_name ... to update selectively some repos """ git_path = which('git') if not git_path: return 'git command not found: You need to have git installed on your system to by able to update git based plugins.' directories = set() repos = self.get(REPOS, {}) core_to_update = 'all' in args or 'core' in args if core_to_update: directories.add(os.path.dirname(__file__)) if 'all' in args: directories.update([self.plugin_dir + os.sep + name for name in repos]) else: directories.update([self.plugin_dir + os.sep + name for name in set(args).intersection(set(repos))]) for d in directories: self.send(mess.getFrom(), "I am updating %s ..." % d, message_type=mess.getType()) p = subprocess.Popen([git_path, 'pull'], cwd=d, stdout=subprocess.PIPE, stderr=subprocess.PIPE) feedback = p.stdout.read().decode('utf-8') + '\n' + '-' * 50 + '\n' err = p.stderr.read().strip().decode('utf-8') if err: feedback += err + '\n' + '-' * 50 + '\n' dep_err = check_dependencies(d) if dep_err: feedback += dep_err + '\n' if p.wait(): self.send(mess.getFrom(), "Update of %s failed...\n\n%s\n\n resuming..." % (d, feedback), message_type=mess.getType()) else: self.send(mess.getFrom(), "Update of %s succeeded...\n\n%s\n\n" % (d, feedback), message_type=mess.getType()) if not core_to_update: for plugin in get_all_plugins(): if plugin.path.startswith(d) and hasattr(plugin, 'is_activated') and plugin.is_activated: name = plugin.name self.send(mess.getFrom(), '/me is reloading plugin %s' % name) reload_plugin_by_name(plugin.name) self.activate_plugin(plugin.name) self.send(mess.getFrom(), '%s reloaded and reactivated' % name) if core_to_update: self.restart(mess, '') return "You have updated the core, I need to restart." return "Done."
def reload(self, mess, args): """reload a plugin""" args = args.strip() if not args: yield ("Please tell me which of the following plugins to reload:\n" "{}".format(self.formatted_plugin_list(active_only=False))) return if args not in get_all_plugin_names(): yield ("{} isn't a valid plugin name. The current plugins are:\n" "{}".format(args, self.formatted_plugin_list(active_only=False))) return yield self.deactivate_plugin(args) # Not needed but keeps the feedback to user consistent reload_plugin_by_name(args) yield self.activate_plugin(args)
def load(self, mess, args): """load a plugin""" args = args.strip() if not args: return ("Please tell me which of the following plugins to reload:\n" "{}".format(self.formatted_plugin_list(active_only=False))) if args not in get_all_plugin_names(): return ("{} isn't a valid plugin name. The current plugins are:\n" "{}".format(args, self.formatted_plugin_list(active_only=False))) if args in get_all_active_plugin_names(): return "{} is already loaded".format(args) reload_plugin_by_name(args) r = self.activate_plugin(args) return r