Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/devbot
diff options
context:
space:
mode:
authorDaniel Narvaez <dwnarvaez@gmail.com>2012-11-26 11:59:04 (GMT)
committer Daniel Narvaez <dwnarvaez@gmail.com>2012-11-26 11:59:04 (GMT)
commit5dcf454dacb1a104fea90735f9a0fa2d76854faf (patch)
tree2323715ae506fcf2627c7fbaabc7d072c387ab3d /devbot
parentc5709d02c5bc52e06862c14df8df4fc764f30d09 (diff)
Add a DistroInfo class
Diffstat (limited to 'devbot')
-rw-r--r--devbot/config.py6
-rw-r--r--devbot/distro.py65
-rw-r--r--devbot/plugins/fedora.py30
-rw-r--r--devbot/plugins/ubuntu.py25
-rw-r--r--devbot/system.py6
5 files changed, 76 insertions, 56 deletions
diff --git a/devbot/config.py b/devbot/config.py
index cade147..798830a 100644
--- a/devbot/config.py
+++ b/devbot/config.py
@@ -118,7 +118,7 @@ def set_install_dir(dir, relocatable=False):
bin_dir = os.path.join(prefix_dir, "bin")
etc_dir = os.path.join(prefix_dir, "etc")
- if distro.get_use_lib64():
+ if distro.get_distro_info().use_lib64:
lib_dir = os.path.join(prefix_dir, "lib64")
system_lib_dir = "/usr/lib64"
else:
@@ -196,7 +196,7 @@ def load_prerequisites():
return json.load(open(path))
def load_checks():
- version = distro.get_system_version()
+ version = distro.get_distro_info().system_version
checks = []
for file in dep_files:
@@ -206,7 +206,7 @@ def load_checks():
return checks
def load_modules():
- version = distro.get_system_version()
+ version = distro.get_distro_info().system_version
module_files = ["system-%s.json" % version,
"sugar.json",
diff --git a/devbot/distro.py b/devbot/distro.py
index 0523936..441fbc1 100644
--- a/devbot/distro.py
+++ b/devbot/distro.py
@@ -2,59 +2,24 @@ import os
import subprocess
_package_managers = {}
+_distros_info = []
-def get_use_lib64():
- return os.uname()[4] == "x86_64" and get_distro_name() != "ubuntu"
+def register_distro_info(distro_info):
+ global _distros_info
+ _distros_info.append(distro_info)
def register_package_manager(name, package_manager):
+ global _package_managers
_package_managers[name] = package_manager
def get_package_manager(test=False, interactive=True):
- name, version = _get_distro_info()
- return _package_managers[name](test=test, interactive=interactive)
-
-def get_system_version():
- name, version = _get_distro_info()
- if (name == "ubuntu" and version == "12.10") or \
- (name == "fedora" and version == "18"):
- return "3.6"
- else:
- return "3.4"
-
-def get_distro_name():
- name, version = _get_distro_info()
- return name
-
-def _get_distro_info():
- distro = "unsupported"
- version = "unknown"
-
- # Fedora
- try:
- fedora_release = open("/etc/fedora-release").read().strip()
- if fedora_release == "Fedora release 17 (Beefy Miracle)":
- distro = "fedora"
- version = "17"
- elif fedora_release == "Fedora release 18 (Spherical Cow)":
- distro = "fedora"
- version = "18"
- except IOError:
- pass
-
- # Ubuntu
- try:
- distributor = subprocess.check_output(["lsb_release", "-si"]).strip()
- release = subprocess.check_output(["lsb_release", "-sr"]).strip()
-
- if distributor == "Ubuntu" and release == "12.10":
- distro = "ubuntu"
- version = "12.10"
- except OSError:
- pass
-
- arch = subprocess.check_output(["uname", "-i"]).strip()
- if arch not in ["i386", "i686", "x86_64"]:
- distro = "unsupported"
- version = "unknown"
-
- return distro, version
+ global _package_managers
+ package_manager_class = _package_managers[get_distro_info().name]
+ return package_manager_class(test=test, interactive=interactive)
+
+def get_distro_info():
+ global _distros_info
+ for info_class in _distros_info:
+ info = info_class()
+ if info.valid:
+ return info
diff --git a/devbot/plugins/fedora.py b/devbot/plugins/fedora.py
index fe12997..cd0288d 100644
--- a/devbot/plugins/fedora.py
+++ b/devbot/plugins/fedora.py
@@ -79,3 +79,33 @@ class PackageManager:
self._find_deps(dep_package, result)
distro.register_package_manager("fedora", PackageManager)
+
+class DistroInfo:
+ def __init__(self):
+ self.use_lib64 = os.uname()[4] == "x86_64"
+
+ arch = subprocess.check_output(["uname", "-i"]).strip()
+
+ self.name = "fedora"
+ self.version = None
+ self.system_version = None
+ self.valid = False
+
+ if arch in ["i386", "i686", "x86_64"]:
+ fedora_release = self._get_fedora_release()
+ if fedora_release == "Fedora release 17 (Beefy Miracle)":
+ self.version = "17"
+ self.system_version = "3.4"
+ self.valid = True
+ elif fedora_release == "Fedora release 18 (Spherical Cow)":
+ self.version = "18"
+ self.system_version = "3.6"
+ self.valid = True
+
+ def _get_fedora_release(self):
+ try:
+ return open("/etc/fedora-release").read().strip()
+ except OSError:
+ return None
+
+distro.register_distro_info(DistroInfo)
diff --git a/devbot/plugins/ubuntu.py b/devbot/plugins/ubuntu.py
index 9cc210d..693a227 100644
--- a/devbot/plugins/ubuntu.py
+++ b/devbot/plugins/ubuntu.py
@@ -80,3 +80,28 @@ class PackageManager:
return result
distro.register_package_manager("ubuntu", PackageManager)
+
+class DistroInfo:
+ def __init__(self):
+ self.name = None
+ self.version = None
+ self.system_version = None
+ self.valid = False
+ self.use_lib64 = False
+
+ if arch in ["i386", "i686", "x86_64"]:
+ try:
+ if self._get_distributor() == "Ubuntu" and \
+ self._get_release() == "12.10":
+ self.name = "ubuntu"
+ self.version = "12.10"
+ self.system_version = "3.6"
+ self.valid = True
+ except OSError:
+ pass
+
+ def _get_distributor(self):
+ return subprocess.check_output(["lsb_release", "-si"]).strip()
+
+ def _get_release(self):
+ return subprocess.check_output(["lsb_release", "-sr"]).strip()
diff --git a/devbot/system.py b/devbot/system.py
index 57e223c..8cb15db 100644
--- a/devbot/system.py
+++ b/devbot/system.py
@@ -75,7 +75,7 @@ checkers = { "binary": check_binary,
"include": check_include }
def run_checks(package_manager, checks, packages):
- distro_name = distro.get_distro_name()
+ distro_name = distro.get_distro_info().name
failed_checks = []
to_install = []
@@ -137,7 +137,7 @@ def warn_if_unsupported(distro_name):
"*********************************************************\n"
def remove_packages(package_manager, packages):
- distro_name = distro.get_distro_name()
+ distro_name = distro.get_distro_info().name
to_keep = []
for package_info in packages.values():
@@ -176,7 +176,7 @@ def check(remove=False, update=False, test=False, interactive=True,
package_manager = \
distro.get_package_manager(test=test, interactive=interactive)
- distro_name = distro.get_distro_name()
+ distro_name = distro.get_distro_info().name
packages = config.load_packages()
checks = config.load_prerequisites()