class PackageInfo
Constants
- APT_SUMMARY_FIELDS
- COPYRIGHT_FIELDS
- COPYRIGHT_TAGS
- 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_copyright_file(package)
click to toggle source
# File lib/package-info.rb, line 83 def parse_copyright_file package return {} if !File.exists?("/usr/share/doc/#{package}/copyright") text = File.read("/usr/share/doc/#{package}/copyright") is_dep_5_compatible?(text) ? parse_dep_5_compatible(text) : parse_non_dep_5_compatible(text) end
parse_copyright_file_summary(package)
click to toggle source
# File lib/package-info.rb, line 89 def parse_copyright_file_summary package return {} if !File.exists?("/usr/share/doc/#{package}/copyright") text = File.read("/usr/share/doc/#{package}/copyright") parse_license_summary(text) 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
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