From c5709d02c5bc52e06862c14df8df4fc764f30d09 Mon Sep 17 00:00:00 2001 From: Daniel Narvaez Date: Mon, 26 Nov 2012 10:50:20 +0000 Subject: Start splitting distro specific code to plugins --- (limited to 'devbot/plugins/fedora.py') diff --git a/devbot/plugins/fedora.py b/devbot/plugins/fedora.py new file mode 100644 index 0000000..fe12997 --- /dev/null +++ b/devbot/plugins/fedora.py @@ -0,0 +1,81 @@ +import os +import subprocess + +from devbot import command +from devbot import distro + +class PackageManager: + def __init__(self, test=False, interactive=True): + self._test = test + self._interactive = interactive + + def install_packages(self, packages): + args = ["yum"] + + if not self._interactive: + args.append("-y") + + args.append("install") + args.extend(packages) + + command.run_with_sudo(args, test=self._test) + + def remove_packages(self, packages): + args = ["rpm", "-e"] + args.extend(packages) + + command.run_with_sudo(args, test=self._test) + + def update(self): + args = ["yum"] + + if not self._interactive: + args.append("-y") + + args.append("update") + + command.run_with_sudo(args, test=self._test) + + 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} ]" + + try: + capabilities = subprocess.check_output(["rpm", "-q", + query_format, + package]).strip() + except subprocess.CalledProcessError: + print "Package %s not installed" % package + return + + filtered = [cap for cap in capabilities.split(" ") + if not cap.startswith("rpmlib")] + + if capabilities and filtered: + args = ["rpm", "-q", + "--queryformat=[%{NAME} ]", + "--whatprovides"] + args.extend(filtered) + + deps_packages = subprocess.check_output(args).strip() + for dep_package in deps_packages.split(" "): + if dep_package not in result: + result.append(dep_package) + self._find_deps(dep_package, result) + +distro.register_package_manager("fedora", PackageManager) -- cgit v0.9.1