Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/devbot/plugins/gentoo.py
blob: 3b0e5fb27de988719cc78b84a49697bd1a708cd3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
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)

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)