package-info 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/package-info.rb +50 -2
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 95476db1bb9ad5391cdb40d0158088549c718eac
4
- data.tar.gz: 488def1ae103fd13eb293b3e8fc7a1170094ffc5
3
+ metadata.gz: 00b064e6fdd8b5fbed78d90f63be32367a3ddd3e
4
+ data.tar.gz: 6cf1e61168b499e936f70f6df9024cdc258e0fa2
5
5
  SHA512:
6
- metadata.gz: 47bf4ada1a6b247e9f7329a26388116d5c92a12ee699d66a864f9dc883304e95b927ea0379fd39e7d26ab201056100591f17076692a10478dcdb89942b3d5e03
7
- data.tar.gz: 8fd1a272866dc9c1c6991aa7aad90a42c9faf41de2acc48e2c6aa017030c0c6772740df7c301a62bc67b1d70cb0ae83d6f33e53785670a2245758692dbfc585f
6
+ metadata.gz: 1bcce3bc3f4074d1c3ae6c128f89a5518bcd36f3efdf9b0005605f3e30833e60350055a2314cab65d6fd431dff32fcb5be90ccc053acdf49e909ac8d0f107507
7
+ data.tar.gz: 9a2213e9519aa52da1d98428f8266f95bd6e5ac973a9a895ebd77707eef130bd71a0c917ecb4aef5aa5c59c3faba6ac0f96e46e4b59493c7e57e01db87428215
@@ -9,7 +9,7 @@ class PackageInfo
9
9
  LICENSE_TAGS = ["gpl", "mit", "license", "license"]
10
10
 
11
11
  LICENSE_TITLE_TAGS = ["GPL", "GNU General Public License", "LGPL-2+",
12
- "LGPL-2.1+", "LGPL-2", "LGPL-3", "LGPL-3+",
12
+ "LGPL-2.1+", "LGPL-2", "LGPL-3", "LGPL-3+",
13
13
  "MPL-1.1", "BSD-2", "zlib", "MIT", "MPL", "ISC",
14
14
  "BSD", "Boost", "Apache", "BSD-3", "Cisco",
15
15
  "Apache 2.0", "Apache 1.0", "Apache 1.1", "LGPL",
@@ -25,6 +25,10 @@ class PackageInfo
25
25
 
26
26
  FORMAT_TAGS = ["format", "html", "txt"]
27
27
 
28
+ APT_SUMMARY_FIELDS = ["Package", "Description-en", "Version", "Homepage"]
29
+
30
+ LICENSE_SUMMARY_TAGS = ["License"]
31
+
28
32
  def create_package_file filename = "packages@#{`hostname`}.csv"
29
33
  write_header(filename)
30
34
  CSV.open(filename, "ab") do |csv|
@@ -32,6 +36,16 @@ class PackageInfo
32
36
  end
33
37
  end
34
38
 
39
+ def create_package_file_summary filename = "packages@#{`hostname`}.csv"
40
+ write_header_summary(filename)
41
+ CSV.open(filename, "ab") do |csv|
42
+ get_package_list.each {|package|
43
+ puts "#{get_package_info_summary(package).values}"
44
+ csv << get_package_info_summary(package).values
45
+ }
46
+ end
47
+ end
48
+
35
49
  def get_package_list
36
50
  `dpkg --get-selections | grep -v "deinstall" | cut -f1 | cut -d':' -f1`.split("\n")
37
51
  end
@@ -41,6 +55,21 @@ class PackageInfo
41
55
  [parse_package_info(package), parse_copyright_file(package)].inject(:merge)
42
56
  end
43
57
 
58
+ def get_package_info_summary package
59
+ puts "retrieve summary for #{package}"
60
+ [parse_package_info_summary(package), parse_copyright_file_summary(package)].inject(:merge)
61
+ end
62
+
63
+ def parse_package_info_summary package
64
+ fields, string_fields = {}, `apt-cache show #{package}`.split("\n")
65
+ string_fields.each do |field|
66
+ if APT_SUMMARY_FIELDS.include?(field.split(": ")[0])
67
+ fields[field.split(": ")[0]] = field.split(": ")[1]
68
+ end
69
+ end
70
+ fields
71
+ end
72
+
44
73
  def parse_package_info package
45
74
  fields, string_fields = {}, `apt-cache show #{package}`.split("\n")
46
75
  string_fields.each {|field| fields[field.split(": ")[0]] = field.split(": ")[1]}
@@ -53,6 +82,12 @@ class PackageInfo
53
82
  is_dep_5_compatible?(text) ? parse_dep_5_compatible(text) : parse_non_dep_5_compatible(text)
54
83
  end
55
84
 
85
+ def parse_copyright_file_summary package
86
+ return {} if !File.exists?("/usr/share/doc/#{package}/copyright")
87
+ text = File.read("/usr/share/doc/#{package}/copyright")
88
+ parse_license_summary(text)
89
+ end
90
+
56
91
  private
57
92
 
58
93
  def write_header filename
@@ -61,6 +96,12 @@ class PackageInfo
61
96
  end
62
97
  end
63
98
 
99
+ def write_header_summary filename
100
+ CSV.open(filename, "w") do |csv|
101
+ csv << APT_SUMMARY_FIELDS + LICENSE_SUMMARY_TAGS
102
+ end
103
+ end
104
+
64
105
  def is_dep_5_compatible? text
65
106
  text.include?("Copyright:")
66
107
  end
@@ -99,12 +140,19 @@ class PackageInfo
99
140
  when match_tags(DISCLAIMER_TAGS, paragraph)
100
141
  fields["Disclaimer"] += paragraph
101
142
  when match_tags(FORMAT_TAGS, paragraph)
102
- fields["Format"] += paragraph
143
+ fields["Format"] += paragraph
103
144
  end
104
145
  end
105
146
  fields
106
147
  end
107
148
 
149
+ def parse_license_summary text
150
+ fields, license_tags = {"License" => ""}, []
151
+ LICENSE_TITLE_TAGS.each {|tag| license_tags << tag if text.include?(tag) }
152
+ fields["License"] = license_tags.join(", ")
153
+ fields
154
+ end
155
+
108
156
  def parse_dep_5_line line, field_name, field_content
109
157
  if line.include?(": ")
110
158
  field_name, field_content = line.split(": ")[0], line.split(": ")[1]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: package-info
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Angelos Kapsimanis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-03 00:00:00.000000000 Z
11
+ date: 2014-09-05 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |2
14
14
  Retrieves information for all installed packages