package-info 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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