Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/devbot/plugins/fedora.py
diff options
context:
space:
mode:
authorDaniel Narvaez <dwnarvaez@gmail.com>2012-11-26 10:50:20 (GMT)
committer Daniel Narvaez <dwnarvaez@gmail.com>2012-11-26 10:50:20 (GMT)
commitc5709d02c5bc52e06862c14df8df4fc764f30d09 (patch)
tree95bc299094170189f28fbfd999ee05272de0e59e /devbot/plugins/fedora.py
parent9c6636a761d2bc627e744e6b0efc45cc7672c485 (diff)
Start splitting distro specific code to plugins
Diffstat (limited to 'devbot/plugins/fedora.py')
-rw-r--r--devbot/plugins/fedora.py81
1 files changed, 81 insertions, 0 deletions
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)