Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/devbot
diff options
context:
space:
mode:
authorErik Price <erik.price16@gmail.com>2013-04-18 03:02:09 (GMT)
committer Erik Price <erik.price16@gmail.com>2013-04-18 03:02:09 (GMT)
commit2775dc0f0c26424819a047a117c85c85bbda900f (patch)
treeb7386fc268781c776e1d27087130ea63e675607f /devbot
parented5cdf0ad28ceec92587af796ff723574a1a71b4 (diff)
Initial Gentoo support
Diffstat (limited to 'devbot')
-rw-r--r--devbot/plugins/gentoo.py125
1 files changed, 125 insertions, 0 deletions
diff --git a/devbot/plugins/gentoo.py b/devbot/plugins/gentoo.py
new file mode 100644
index 0000000..a9c3509
--- /dev/null
+++ b/devbot/plugins/gentoo.py
@@ -0,0 +1,125 @@
+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):
+ self._test = test
+ self._interactive = interactive
+
+ def install_packages(self, packages):
+ args = ["emerge", "-vu"]
+
+ if self._interactive:
+ args.append("-a")
+
+ args.extend(packages)
+
+ command.run_with_sudo(args, test=self._test,
+ interactive=self._interactive)
+
+ def remove_packages(self, packages):
+ args = ["emerge", "-vc"]
+ args.extend(packages)
+
+ if self._interactive:
+ args.append("-a")
+
+ print(args)
+
+ command.run_with_sudo(args, test=self._test)
+
+ def update(self):
+ args = ["emerge", "-uvDN"]
+
+ if self._interactive:
+ args.append("-a")
+
+ command.run_with_sudo(args, test=self._test,
+ interactive=self._interactive)
+
+ # TODO: This currently uses eix, which is non-standard (but common)
+ def find_all(self):
+ packages = subprocess.check_output(["eix", "-I", "--only-names"])
+
+ return packages.split(" ")
+
+ # TODO
+ 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):
+
+ # Ensure that package exists first
+ try:
+ print('_find_deps1')
+ subprocess.check_output(["eix", "-IAe", package, "--format",
+ '<name>'])
+ except subprocess.CalledProcessError:
+ print("Package %s not installed" % package)
+ return
+ print('_find_deps')
+ # FIXME: This command is horrifying
+ f = os.popen("""equery --quiet list emacs |
+ xargs equery --no-color --quiet depgraph -UAMl |
+ perl -pe 's/\[.*?\]\s+(.*?\/.*?)(-[0-9].*)?$/\1/' |
+ tail -n +2""")
+
+ dependencies = f.read().strip().split()
+ for dep in dependencies:
+ if dep not in result:
+ result.append(dep)
+
+
+
+ pass
+
+distro.register_package_manager("gentoo", PackageManager)
+
+class DistroInfo(interfaces.DistroInfo):
+ _GENTOO_RELEASE_PATH = "/etc/gentoo-release"
+
+ def __init__(self):
+ arch = self._get_architecture()
+
+ self.name = "gentoo"
+ self.version = None
+ self.gnome_version = "TODO"
+ self.gstreamer_version = "TODO"
+ self.valid = True
+
+ # TODO: Confirm validity of this
+ self.supported = (arch in [b'i386', b'i686', b'x86_64'])
+
+ self.lib_dir = None
+
+ if arch == "x86_64":
+ self.lib_dir = "lib64"
+
+ try:
+ release = subprocess.check_output(["lsb_release", "-r"])
+ release = release.split()[1].strip()
+ except:
+ release = None
+ self.valid = False
+
+ if release == b'2.1':
+ self.version = "2.1"
+ else:
+ self.supported = False
+
+ def _get_architecture(self):
+ return subprocess.check_output(["uname", "-m"]).strip()
+
+distro.register_distro_info(DistroInfo)