From 225fec76eac61dcd0bbbd090fadad56f7917fc68 Mon Sep 17 00:00:00 2001 From: Daniel Narvaez Date: Wed, 28 Nov 2012 23:51:29 +0000 Subject: Use pkgconfig-2.7 Fedora, Ubuntu and Debian all seems to have it --- (limited to 'devbot/plugins/debian.py') diff --git a/devbot/plugins/debian.py b/devbot/plugins/debian.py new file mode 100644 index 0000000..4612794 --- /dev/null +++ b/devbot/plugins/debian.py @@ -0,0 +1,116 @@ +import os +import subprocess + +from devbot import command +from devbot import distro +from devbot.plugins import interfaces + +class PackageManager(interfaces.PackageManager): + def __init__(self, test=False, interactive=True): + import apt + + self._test = test + self._interactive = interactive + + self._cache = apt.cache.Cache() + + def install_packages(self, packages): + args = ["apt-get"] + + 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 = ["dpkg", "-P"] + args.extend(packages) + + command.run_with_sudo(args, test=self._test) + + def update(self): + command.run_with_sudo(["apt-get", "update"], test=self._test) + + args = ["apt-get"] + + if not self._interactive: + args.append("-y") + + args.append("upgrade") + + command.run_with_sudo(args, test=self._test) + + def find_all(self): + return [package.name for package in self._cache + if package.installed is not None] + + def _find_deps(self, package, result): + if self._cache.is_virtual_package(package): + for providing in self._cache.get_providing_packages(package): + self._find_deps(providing.name, result) + return + + if package not in self._cache: + print "Package %s not in cache" % package + return + + installed = self._cache[package].installed + if installed is None: + print "Package %s not installed" % package + return + + for dependency in installed.dependencies: + for base_dependency in dependency.or_dependencies: + dependency_name = base_dependency.name + if dependency_name not in result: + result.append(dependency_name) + self._find_deps(dependency_name, result) + + def find_with_deps(self, package_names): + result = [] + + for package in package_names: + if package is not None: + self._find_deps(package, result) + if package not in result: + result.append(package) + + return result + +distro.register_package_manager("debian", PackageManager) + +class DistroInfo(interfaces.DistroInfo): + def __init__(self): + arch = subprocess.check_output(["arch"]).strip() + + self.name = "debian" + self.version = "unknown" + self.system_version = "3.6" + self.valid = True + self.supported = (arch in ["i686", "x86_64"]) + self.use_lib64 = False + + if self._get_distributor() != "debian": + self.valid = False + + self.version = self._get_release() + + if self.version != "wheezy": + self.supported = False + + def _get_distributor(self): + try: + return subprocess.check_output(["lsb_release", "-si"]).strip() + except OSError: + None + + def _get_release(self): + try: + return subprocess.check_output(["lsb_release", "-sc"]).strip() + except OSError: + return None + +distro.register_distro_info(DistroInfo) -- cgit v0.9.1