module Kanrisuru::Core::Apt

Constants

PackageDetail
PackageOverview
Source

Public Instance Methods

apt(action, opts = {}) click to toggle source
# File lib/kanrisuru/core/apt.rb, line 39
def apt(action, opts = {})
  case action
  when 'list'
    apt_list(opts)
  when 'update'
    apt_update(opts)
  when 'upgrade'
    apt_upgrade(opts)
  when 'full-upgrade', 'full_upgrade'
    apt_full_upgrade(opts)
  when 'install'
    apt_install(opts)
  when 'remove'
    apt_remove(opts)
  when 'purge'
    apt_purge(opts)
  when 'autoremove'
    apt_autoremove(opts)
  when 'search'
    apt_search(opts)
  when 'show'
    apt_show(opts)
  when 'clean'
    apt_clean(opts)
  when 'autoclean'
    apt_autoclean(opts)
  end
end

Private Instance Methods

apt_autoclean(_opts) click to toggle source
# File lib/kanrisuru/core/apt.rb, line 70
def apt_autoclean(_opts)
  command = Kanrisuru::Command.new('apt-get autoclean')
  execute_shell(command)
  Kanrisuru::Result.new(command)
end
apt_autoremove(_opts) click to toggle source
# File lib/kanrisuru/core/apt.rb, line 133
def apt_autoremove(_opts)
  command = Kanrisuru::Command.new('apt-get autoremove')
  command.append_flag('-y')

  execute_shell(command)
  Kanrisuru::Result.new(command)
end
apt_clean(_opts) click to toggle source
# File lib/kanrisuru/core/apt.rb, line 76
def apt_clean(_opts)
  command = Kanrisuru::Command.new('apt-get clean')
  execute_shell(command)
  Kanrisuru::Result.new(command)
end
apt_full_upgrade(_opts) click to toggle source
# File lib/kanrisuru/core/apt.rb, line 178
def apt_full_upgrade(_opts)
  command = Kanrisuru::Command.new('apt full-upgrade')
  command.append_flag('-y')
  execute_shell(command)
  Kanrisuru::Result.new(command)
end
apt_install(opts) click to toggle source
# File lib/kanrisuru/core/apt.rb, line 163
def apt_install(opts)
  command = Kanrisuru::Command.new('apt-get install')
  command.append_flag('-y')

  command.append_flag('--no-upgrade', opts[:no_upgrade])
  command.append_flag('--only-upgrade', opts[:only_upgrade])
  command.append_flag('--reinstall', opts[:reinstall])

  packages = Kanrisuru::Util.string_join_array(opts[:packages], ' ')
  command << packages

  execute_shell(command)
  Kanrisuru::Result.new(command)
end
apt_list(opts) click to toggle source
# File lib/kanrisuru/core/apt.rb, line 108
def apt_list(opts)
  command = Kanrisuru::Command.new('apt list')
  command.append_flag('--installed', opts[:installed])
  command.append_flag('--upgradeable', opts[:upgradeable])
  command.append_flag('--all-versions', opts[:all_versions])
  command.append_arg('-a', opts[:package_name])

  execute_shell(command)

  Kanrisuru::Result.new(command) do |cmd|
    lines = cmd.to_a
    lines.shift

    result = []
    lines.each do |line|
      item = parse_apt_line(line)
      next unless item

      result << item
    end

    result
  end
end
apt_purge(opts) click to toggle source
# File lib/kanrisuru/core/apt.rb, line 141
def apt_purge(opts)
  command = Kanrisuru::Command.new('apt-get purge')
  command.append_flag('-y')

  packages = Kanrisuru::Util.string_join_array(opts[:packages], ' ')
  command << packages

  execute_shell(command)
  Kanrisuru::Result.new(command)
end
apt_remove(opts) click to toggle source
# File lib/kanrisuru/core/apt.rb, line 152
def apt_remove(opts)
  command = Kanrisuru::Command.new('apt-get remove')
  command.append_flag('-y')

  packages = Kanrisuru::Util.string_join_array(opts[:packages], ' ')
  command << packages

  execute_shell(command)
  Kanrisuru::Result.new(command)
end
apt_show(opts) click to toggle source
# File lib/kanrisuru/core/apt.rb, line 199
def apt_show(opts)
  command = Kanrisuru::Command.new('apt show')
  command.append_flag('-a')

  packages = Kanrisuru::Util.string_join_array(opts[:packages], ' ')
  command << packages

  execute_shell(command)

  Kanrisuru::Result.new(command) do |cmd|
    lines = cmd.to_a
    rows = []

    current_row = nil
    description = ''

    lines.each do |line|
      next if line == 'WARNING: apt does not have a stable CLI interface. Use with caution in scripts.'
      next if ['', nil, '.'].include?(line)

      case line
      when /^Package:/
        unless current_row.nil?
          current_row.description = description.strip
          description = ''
          rows << current_row
        end

        current_row = PackageDetail.new
        current_row.package = extract_single_line(line)
      when /^Version:/
        current_row.version = extract_single_line(line)
      when /^Priority:/
        current_row.priority = extract_single_line(line)
      when /^Section:/
        current_row.section = extract_single_line(line)
      when /^Origin:/
        current_row.origin = extract_single_line(line)
      when /^Maintainer:/
        current_row.maintainer = extract_single_line(line)
      when /^Original-Maintainer:/
        current_row.original_maintainer = extract_single_line(line)
      when /^Bugs:/
        current_row.bugs = extract_single_line(line)
      when /^Installed-Size:/
        size = Kanrisuru::Util::Bits.normalize_size(extract_single_line(line))
        current_row.install_size = size
      when /^Download-Size:/
        size = Kanrisuru::Util::Bits.normalize_size(extract_single_line(line))
        current_row.download_size = size
      when /^Depends:/
        current_row.dependencies = parse_comma_values(extract_single_line(line))
      when /^Provides:/
        current_row.provides = parse_comma_values(extract_single_line(line))
      when /^Recommends:/
        current_row.recommends = parse_comma_values(extract_single_line(line))
      when /^Suggests:/
        current_row.suggests = parse_comma_values(extract_single_line(line))
      when /^Breaks:/
        current_row.breaks = parse_comma_values(extract_single_line(line))
      when /^Conflicts:/
        current_row.conflicts = parse_comma_values(extract_single_line(line))
      when /^Replaces:/
        current_row.replaces = parse_comma_values(extract_single_line(line))
      when /^Homepage:/
        current_row.homepage = extract_single_line(line)
      when /^Task:/
        current_row.task = parse_comma_values(extract_single_line(line))
      when /^Supported:/
        current_row.supported = extract_single_line(line)
      when /^APT-Sources:/
        current_row.apt_sources = parse_apt_sources(extract_single_line(line))
      when /^APT-Manual-Installed:/
        current_row.apt_manual_installed = extract_single_line(line) == 'yes'
      when /^Description:/
        current_row.summary = extract_single_line(line)
      else
        description += " #{line.strip}"
      end
    end

    current_row.description = description.strip
    rows << current_row
    rows
  end
end
apt_update(_opts) click to toggle source
# File lib/kanrisuru/core/apt.rb, line 192
def apt_update(_opts)
  command = Kanrisuru::Command.new('apt-get update')
  command.append_flag('-y')
  execute_shell(command)
  Kanrisuru::Result.new(command)
end
apt_upgrade(_opts) click to toggle source
# File lib/kanrisuru/core/apt.rb, line 185
def apt_upgrade(_opts)
  command = Kanrisuru::Command.new('apt-get upgrade')
  command.append_flag('-y')
  execute_shell(command)
  Kanrisuru::Result.new(command)
end
extract_single_line(line) click to toggle source
# File lib/kanrisuru/core/apt.rb, line 286
def extract_single_line(line)
  line.split(': ')[1]
end
parse_apt_line(line) click to toggle source
# File lib/kanrisuru/core/apt.rb, line 299
def parse_apt_line(line)
  values = line.split('/')
  return if values.length < 2

  package = values[0]

  values = values[1].split
  suites = values[0].split(',')
  version = values[1]
  architecture = values[2]

  installed = false
  upgradeable = false
  automatic = false

  if values.length > 3
    installed = values[3].include?('installed')
    upgradeable = values[3].include?('upgradeable')
    automatic = values[3].include?('automatic')
  end

  PackageOverview.new(package, version, suites, architecture, installed, upgradeable, automatic)
end
parse_apt_sources(string) click to toggle source
# File lib/kanrisuru/core/apt.rb, line 294
def parse_apt_sources(string)
  url, dist, architecture, = string.split
  Source.new(url, dist, architecture)
end
parse_comma_values(string) click to toggle source
# File lib/kanrisuru/core/apt.rb, line 290
def parse_comma_values(string)
  string.split(', ')
end