class Autoproj::PackageManagers::ZypperManager

Package manger for OpenSuse and Suse (untested)

Public Class Methods

new(ws) click to toggle source
# File lib/autoproj/package_managers/zypper_manager.rb, line 5
def initialize(ws)
    super(ws, true,
            %w[zypper install],
            %w[zypper -n install])
end

Public Instance Methods

filter_uptodate_packages(packages) click to toggle source
# File lib/autoproj/package_managers/zypper_manager.rb, line 11
def filter_uptodate_packages(packages)
    `LANG=C rpm -q --whatprovides '#{packages.join("' '")}'`
    has_all_pkgs = $?.success?

    if has_all_pkgs
        []
    else
        packages # let zypper filter, we need root now anyways
    end
end
install(packages, filter_uptodate_packages: false, install_only: false) click to toggle source
# File lib/autoproj/package_managers/zypper_manager.rb, line 22
def install(packages, filter_uptodate_packages: false, install_only: false)
    if filter_uptodate_packages || install_only
        packages = filter_uptodate_packages(packages)
    end

    patterns, packages = packages.partition { |pkg| pkg =~ /^@/ }
    patterns = patterns.map { |str| str[1..-1] }
    result = false
    unless patterns.empty?
        result |= super(patterns,
                        auto_install_cmd: %w[zypper --non-interactive install --type pattern],
                        user_install_cmd: %w[zypper install --type pattern])
    end
    result |= super(packages) unless packages.empty?
    if result
        # Invalidate caching of installed packages, as we just
        # installed new packages !
        @installed_packages = nil
    end
end