diff options
author | Daniel Narvaez <dwnarvaez@gmail.com> | 2012-11-28 23:51:29 (GMT) |
---|---|---|
committer | Daniel Narvaez <dwnarvaez@gmail.com> | 2012-11-28 23:52:10 (GMT) |
commit | 225fec76eac61dcd0bbbd090fadad56f7917fc68 (patch) | |
tree | 5b74b93eb79320078fdaa8d3ec27f06e1b91245b /devbot | |
parent | e92095e2a4b544ceb57cf5392c95ddc1979a543f (diff) |
Use pkgconfig-2.7
Fedora, Ubuntu and Debian all seems to have it
Diffstat (limited to 'devbot')
-rw-r--r-- | devbot/plugins/debian.py | 116 |
1 files changed, 116 insertions, 0 deletions
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) |