Class: PackageInfo
- Inherits:
-
Object
- Object
- PackageInfo
- Defined in:
- lib/package-info.rb
Constant Summary collapse
- COPYRIGHT_FIELDS =
["License-Title", "Format", "Upstream-Name", "Upstream-Contact", "Source", "Disclaimer", "Comment", "License", "Copyright", "Files"]
- LICENSE_TAGS =
["gpl", "mit", "license", "license"]
- LICENSE_TITLE_TAGS =
["GPL", "LGPL-2+", "LGPL-2.1+", "LGPL-2", "LGPL-3", "LGPL-3+", "MPL-1.1", "BSD-2", "zlib", "MIT", "MPL", "ISC", "BSD", "Boost", "Apache", "BSD-3", "Cisco", "Apache 2.0", "Apache 1.0", "Apache 1.1", "LGPL", "ASL", "Artistic", "OFL", "CC-BY-SA", "CPL"]
- COPYRIGHT_TAGS =
["copyright"]
- UPSTREAM_NAME_TAGS =
["author", "developer", "upstream"]
- FILES_TAGS =
["files"]
- DISCLAIMER_TAGS =
["disclaimer"]
- FORMAT_TAGS =
["format", "html", "txt"]
- APT_SUMMARY_FIELDS =
["Package", "Version", "Description-en", "Homepage"]
- LICENSE_SUMMARY_TAGS =
["License"]
Instance Method Summary collapse
- #create_package_file(filename = "packages@#{`hostname`}.csv") ⇒ Object
- #create_package_file_summary(filename = "packages@#{`hostname`}.csv") ⇒ Object
- #get_package_info(package) ⇒ Object
- #get_package_info_summary(package) ⇒ Object
- #get_package_list ⇒ Object
- #init_package_summary_hash ⇒ Object
- #parse_copyright_file(package) ⇒ Object
- #parse_copyright_file_summary(package) ⇒ Object
- #parse_package_info(package) ⇒ Object
- #parse_package_info_summary(package) ⇒ Object
Instance Method Details
#create_package_file(filename = "packages@#{`hostname`}.csv") ⇒ Object
31 32 33 34 35 36 |
# 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@#{`hostname`}.csv") ⇒ Object
38 39 40 41 42 43 44 45 |
# 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) ⇒ Object
51 52 53 54 |
# 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) ⇒ Object
56 57 58 59 |
# 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 ⇒ Object
47 48 49 |
# 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 ⇒ Object
71 72 73 74 75 |
# 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) ⇒ Object
83 84 85 86 87 |
# 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) ⇒ Object
89 90 91 92 93 |
# 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) ⇒ Object
77 78 79 80 81 |
# 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) ⇒ Object
61 62 63 64 65 66 67 68 69 |
# 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 |