Class: PackageInfo

Inherits:
Object
  • Object
show all
Defined in:
lib/package-info.rb

Constant Summary collapse

["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"]
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

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_listObject



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_hashObject



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


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


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