From 1f603af6e31adb8e171806f914563607fbba446e Mon Sep 17 00:00:00 2001 From: Daniel Narvaez Date: Wed, 14 Nov 2012 19:09:26 +0000 Subject: Initial work on autoupdate and autoremove --- (limited to 'devbot/distro.py') diff --git a/devbot/distro.py b/devbot/distro.py index fe2522d..a08218f 100644 --- a/devbot/distro.py +++ b/devbot/distro.py @@ -9,6 +9,51 @@ class FedoraPackageManager: command.run_with_sudo(args) + def remove_packages(self, packages): + args = ["rpm", "-e"] + args.extend(packages) + + command.run_with_sudo(args) + + def update(self): + command.run_with_sudo(["yum", "update"]) + + def find_all(self): + query_format = "--queryformat=[%{NAME} ]" + all = subprocess.check_output(["rpm", "-qa", query_format]).strip() + return all.split(" ") + + def find_with_deps(self, packages): + result = [] + + for package in packages: + if package not in result: + result.append(package) + + self._find_deps(package, result) + + return result + + def _find_deps(self, package, result): + query_format = "--queryformat=[%{REQUIRENAME} ]" + capabilities = subprocess.check_output(["rpm", "-q", + query_format, + package]).strip() + + for capability in capabilities.strip().split(" "): + if capability.startswith("rpmlib"): + continue + query_format = "--queryformat=[%{NAME} ]" + deps_packages = subprocess.check_output(["rpm", "-q", + query_format, + "--whatprovides", + capability]).strip() + + for dep_package in deps_packages.split(" "): + if dep_package not in result: + result.append(dep_package) + self._find_deps(dep_package, result) + class UbuntuPackageManager: def install_packages(self, packages): args = ["apt-get", "install"] @@ -16,6 +61,15 @@ class UbuntuPackageManager: command.run_with_sudo(args) + def remove_packages(self, packages): + raise NotImplementedError + + def update(self): + raise NotImplementedError + + def find_with_deps(package_names): + raise NotImplementedError + def get_package_manager(): name, version = _get_distro_info() -- cgit v0.9.1