class PackageInfo

Constants

APT_SUMMARY_FIELDS
DISCLAIMER_TAGS
FILES_TAGS
FORMAT_TAGS
LICENSE_SUMMARY_TAGS
LICENSE_TAGS
LICENSE_TITLE_TAGS
UPSTREAM_NAME_TAGS

Public Instance Methods

create_package_file(filename = "packages@ click to toggle source
# File lib/package-info.rb, line 31
def create_package_file filename = "packages@#{`hostname`}.csv"
  write_header(filename)
  CSV.open(filename, "ab") do |csv|
    get_package_list.each {|package| csv << get_package_info(package).values}
  end
end
create_package_file_summary(filename = "packages@ click to toggle source
# File lib/package-info.rb, line 38
def create_package_file_summary filename = "packages@#{`hostname`}.csv"
  write_header_summary(filename)
  CSV.open(filename, "ab") do |csv|
    get_package_list.each {|package| 
      csv << get_package_info_summary(package).values
    }
  end
end
get_package_info(package) click to toggle source
# File lib/package-info.rb, line 51
def get_package_info package
  puts "retrieve info for #{package}"
  [parse_package_info(package), parse_copyright_file(package)].inject(:merge)
end
get_package_info_summary(package) click to toggle source
# File lib/package-info.rb, line 56
def get_package_info_summary package
  puts "retrieve summary for #{package}"
  [parse_package_info_summary(package), parse_copyright_file_summary(package)].inject(:merge)
end
get_package_list() click to toggle source
# File lib/package-info.rb, line 47
def get_package_list
  `dpkg --get-selections | grep -v "deinstall" | cut -f1 | cut -d':' -f1`.split("\n")
end
init_package_summary_hash() click to toggle source
# File lib/package-info.rb, line 71
def init_package_summary_hash
  hash = {}
  APT_SUMMARY_FIELDS.each {|field| hash[field] = ""}
  hash
end
parse_package_info(package) click to toggle source
# File lib/package-info.rb, line 77
def parse_package_info package
  fields, string_fields = {}, `apt-cache show #{package}`.split("\n")
  string_fields.each {|field| fields[field.split(": ")[0]] = field.split(": ")[1]}
  fields
end
parse_package_info_summary(package) click to toggle source
# File lib/package-info.rb, line 61
def parse_package_info_summary package
  fields, string_fields = init_package_summary_hash, `apt-cache show #{package}`.split("\n")
  string_fields.each do |field|
    if APT_SUMMARY_FIELDS.include?(field.split(": ")[0])
      fields[field.split(": ")[0]] = field.split(": ")[1]
    end
  end
  fields
end

Private Instance Methods

add_license_titles(tags, paragraph) click to toggle source
# File lib/package-info.rb, line 177
def add_license_titles tags, paragraph
  titles = ""
  tags.each {|tag| titles += tag + ", " if paragraph.include?(tag)}
  titles
end
init_fields_hash() click to toggle source
# File lib/package-info.rb, line 171
def init_fields_hash
  fields = {}
  COPYRIGHT_FIELDS.each {|f| fields[f] = ""}
  fields
end
is_dep_5_compatible?(text) click to toggle source
# File lib/package-info.rb, line 109
def is_dep_5_compatible? text
  text.include?("Copyright:")
end
match_tags(tags, paragraph) click to toggle source
# File lib/package-info.rb, line 183
def match_tags tags, paragraph
  tags.each {|tag| return true if paragraph.downcase.include?(tag)}
  false
end
parse_dep_5_compatible(text) click to toggle source
# File lib/package-info.rb, line 113
def parse_dep_5_compatible text
  fields, lines = {}, text
    .encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
    .split(/\n/)
  field_name, field_content = "", ""

  lines.each do |line|
    field_name, field_content = parse_dep_5_line(line, field_name, field_content)
    if COPYRIGHT_FIELDS.include?(field_name)
      fields[field_name] = field_content
    end
  end
  fields
end
parse_dep_5_line(line, field_name, field_content) click to toggle source
# File lib/package-info.rb, line 160
def parse_dep_5_line line, field_name, field_content
  if line.include?(": ")
    field_name, field_content = line.split(": ")[0], line.split(": ")[1]
  else
    line = "" if line.nil?
    field_content = "" if field_content.nil?
    field_content += "\n" + line
  end
  return field_name, field_content
end
parse_license_summary(text) click to toggle source
# File lib/package-info.rb, line 153
def parse_license_summary text
  fields, license_tags = {"License" => ""}, []
  LICENSE_TITLE_TAGS.each {|tag| license_tags << tag if text.include?(tag) }
  fields["License"] = license_tags.join(", ")
  fields
end
parse_non_dep_5_compatible(text) click to toggle source
# File lib/package-info.rb, line 128
def parse_non_dep_5_compatible text
  fields, paragraphs = init_fields_hash, text.split(/^$\n/)

  paragraphs.each do |paragraph|
    case
    when match_tags(LICENSE_TAGS, paragraph)
      fields["License-Title"] += add_license_titles(LICENSE_TITLE_TAGS, paragraph)
      fields["License"] += paragraph
    when match_tags(LICENSE_TAGS, paragraph)
      fields["License"] += paragraph
    when match_tags(COPYRIGHT_TAGS, paragraph)
      fields["Copyright"] += paragraph
    when match_tags(UPSTREAM_NAME_TAGS, paragraph)
      fields["Upstream-Name"] += paragraph
    when match_tags(FILES_TAGS, paragraph)
      fields["Files"] += paragraph
    when match_tags(DISCLAIMER_TAGS, paragraph)
      fields["Disclaimer"] += paragraph
    when match_tags(FORMAT_TAGS, paragraph)
      fields["Format"] += paragraph
    end
  end
  fields
end
write_header(filename) click to toggle source
# File lib/package-info.rb, line 97
def write_header filename
  CSV.open(filename, "w") do |csv|
    csv << get_package_info(get_package_list.first).keys
  end
end
write_header_summary(filename) click to toggle source
# File lib/package-info.rb, line 103
def write_header_summary filename
  CSV.open(filename, "w") do |csv|
    csv << APT_SUMMARY_FIELDS + LICENSE_SUMMARY_TAGS
  end
end