From 5dcf454dacb1a104fea90735f9a0fa2d76854faf Mon Sep 17 00:00:00 2001 From: Daniel Narvaez Date: Mon, 26 Nov 2012 11:59:04 +0000 Subject: Add a DistroInfo class --- diff --git a/commands/check-system b/commands/check-system index 2f501c0..85d1f7d 100755 --- a/commands/check-system +++ b/commands/check-system @@ -32,7 +32,7 @@ def apply_ubuntu_tweaks(): command.run_with_sudo([ubuntu_tweaks]) -if distro.get_distro_name() == "ubuntu": +if distro.get_distro_info().name == "ubuntu": apply_ubuntu_tweaks() interactive = "SUGAR_BUILDBOT" not in os.environ diff --git a/commands/common.py b/commands/common.py index e8fab6c..82f3869 100644 --- a/commands/common.py +++ b/commands/common.py @@ -23,7 +23,7 @@ def setup(): config.set_home_dir(os.path.join(base_dir, "home")) config.set_prefs_path(os.path.join(base_dir, "prefs")) - version = distro.get_system_version() + version = distro.get_distro_info().system_version module_files = ["system-%s.json" % version, "sugar.json", 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() -- cgit v0.9.1