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.
- checksums.yaml +4 -4
- data/lib/package-info.rb +50 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 00b064e6fdd8b5fbed78d90f63be32367a3ddd3e
|
4
|
+
data.tar.gz: 6cf1e61168b499e936f70f6df9024cdc258e0fa2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1bcce3bc3f4074d1c3ae6c128f89a5518bcd36f3efdf9b0005605f3e30833e60350055a2314cab65d6fd431dff32fcb5be90ccc053acdf49e909ac8d0f107507
|
7
|
+
data.tar.gz: 9a2213e9519aa52da1d98428f8266f95bd6e5ac973a9a895ebd77707eef130bd71a0c917ecb4aef5aa5c59c3faba6ac0f96e46e4b59493c7e57e01db87428215
|
data/lib/package-info.rb
CHANGED
@@ -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.
|
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-
|
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
|