slack-utils 0.6.0 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +1 -1
- data/bin/slf +2 -0
- data/bin/slfindlinked +3 -0
- data/bin/sli +65 -0
- data/bin/sll +6 -5
- data/bin/slo +2 -0
- data/bin/slp +2 -0
- data/bin/slt +2 -0
- data/lib/slackware/changelog.rb +21 -6
- data/lib/slackware/changelog/rss.rb +53 -19
- data/lib/slackware/package.rb +5 -6
- data/lib/slackware/package_bundle.rb +42 -0
- data/lib/slackware/repo.rb +4 -26
- data/lib/slackware/system.rb +1 -6
- data/lib/slackware/utils.rb +12 -0
- data/lib/slackware/version.rb +2 -2
- metadata +7 -4
data/README.rdoc
CHANGED
data/bin/slf
CHANGED
data/bin/slfindlinked
CHANGED
data/bin/sli
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$PROGRAM_NAME = File.basename(__FILE__)
|
4
|
+
|
5
|
+
require 'optparse'
|
6
|
+
require 'rubygems'
|
7
|
+
require 'slackware/utils'
|
8
|
+
|
9
|
+
options = {}
|
10
|
+
begin
|
11
|
+
OptionParser.new do |opts|
|
12
|
+
opts.banner = <<-EOS
|
13
|
+
|
14
|
+
List installed Slackware package's information.
|
15
|
+
|
16
|
+
Usage:
|
17
|
+
#{File.basename(__FILE__)} [options] [search flags] [list of names]
|
18
|
+
|
19
|
+
if no flags are used, then all entries are listed
|
20
|
+
if no search flags, only names, then those only those matching entries are listed
|
21
|
+
|
22
|
+
EOS
|
23
|
+
opts.on("-c", "--color", "Colorize output") do |o|
|
24
|
+
options[:color] = o
|
25
|
+
end
|
26
|
+
opts.on("-p", "--pkg [NAME]", "Package PKGNAME (loose match)") do |o|
|
27
|
+
options[:pkg] = o
|
28
|
+
end
|
29
|
+
opts.on("-V", "--Version [VERSION]", "Package VERSION (loose match)") do |o|
|
30
|
+
options[:version] = o
|
31
|
+
end
|
32
|
+
opts.on("-a", "--arch [ARCH]", "Package ARCH (exact match)") do |o|
|
33
|
+
options[:arch] = o
|
34
|
+
end
|
35
|
+
opts.on("-b", "--build [BUILD]", "Package BUILD (exact match)") do |o|
|
36
|
+
options[:build] = o
|
37
|
+
end
|
38
|
+
opts.on("-t", "--tag [TAG]", "Package TAG (loose match)") do |o|
|
39
|
+
options[:tag] = o
|
40
|
+
end
|
41
|
+
opts.on("-v", "--version", "Display version of this software") do |o|
|
42
|
+
printf("slack-utils (%s) version: %s, Slackware version: %s\n",
|
43
|
+
File.basename(__FILE__),
|
44
|
+
Slackware::UTILS_VERSION,
|
45
|
+
Slackware::System.version
|
46
|
+
)
|
47
|
+
exit()
|
48
|
+
end
|
49
|
+
end.parse!
|
50
|
+
rescue OptionParser::InvalidOption => e
|
51
|
+
$stderr.write("ERROR: #{e.message}, see --help\n")
|
52
|
+
exit 1
|
53
|
+
end
|
54
|
+
|
55
|
+
if (ARGV.count > 0)
|
56
|
+
options[:all] = true
|
57
|
+
end
|
58
|
+
|
59
|
+
begin
|
60
|
+
print_packages_description(build_packages(options, ARGV))
|
61
|
+
rescue Interrupt
|
62
|
+
exit 0
|
63
|
+
end
|
64
|
+
|
65
|
+
|
data/bin/sll
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
$PROGRAM_NAME = File.basename(__FILE__)
|
4
|
+
|
3
5
|
require 'optparse'
|
4
6
|
require 'rubygems'
|
5
7
|
require 'slackware/utils'
|
@@ -46,11 +48,6 @@ EOS
|
|
46
48
|
|
47
49
|
opts.parse!
|
48
50
|
|
49
|
-
if (options[:pkg].nil? && options[:Version].nil? && options[:arch].nil? && options[:build].nil? && options[:tag].nil? && not(options[:force]))
|
50
|
-
$stderr.write("ERROR: force me if you really want to see all files ...\n")
|
51
|
-
puts opts
|
52
|
-
exit 2
|
53
|
-
end
|
54
51
|
end
|
55
52
|
rescue OptionParser::InvalidOption => e
|
56
53
|
$stderr.write("ERROR: #{e.message}, see --help\n")
|
@@ -58,8 +55,12 @@ rescue OptionParser::InvalidOption => e
|
|
58
55
|
end
|
59
56
|
|
60
57
|
# handing through that we are listing owned files
|
58
|
+
# XXX this is not even jeing used
|
61
59
|
options[:list_files] = true
|
62
60
|
|
61
|
+
if ARGV.count > 0
|
62
|
+
options[:all] = true
|
63
|
+
end
|
63
64
|
|
64
65
|
begin
|
65
66
|
print_package_file_list(build_packages(options, ARGV))
|
data/bin/slo
CHANGED
data/bin/slp
CHANGED
data/bin/slt
CHANGED
data/lib/slackware/changelog.rb
CHANGED
@@ -93,9 +93,10 @@ module Slackware
|
|
93
93
|
|
94
94
|
# +file+ can be a path to a file, or a +File+ object
|
95
95
|
# +opts+ can include
|
96
|
-
# * :arch
|
97
|
-
# * :version
|
98
|
-
# * :url
|
96
|
+
# * :arch - basically '64' or '32'
|
97
|
+
# * :version - 13.1, 13.2, current, etc.
|
98
|
+
# * :url - the URL web link to the ChangeLog.txt
|
99
|
+
# * :image_url - the URL for the loge used in the RSS feed
|
99
100
|
def initialize(file = nil, opts = {})
|
100
101
|
@file = file
|
101
102
|
@opts = opts
|
@@ -111,14 +112,28 @@ module Slackware
|
|
111
112
|
def security
|
112
113
|
@updates.map {|u| u.entries.map {|e| {:date => u.date, :entry => e } if e.security } }.flatten.compact
|
113
114
|
end
|
115
|
+
def pkgs_removed
|
116
|
+
@updates.map {|u| u.entries.map {|e| {:date => u.date, :entry => e } if e.action == "Removed" } }.flatten.compact
|
117
|
+
end
|
118
|
+
def pkgs_added
|
119
|
+
@updates.map {|u| u.entries.map {|e| {:date => u.date, :entry => e } if e.action == "Added" } }.flatten.compact
|
120
|
+
end
|
121
|
+
def pkgs_upgraded
|
122
|
+
@updates.map {|u| u.entries.map {|e| {:date => u.date, :entry => e } if e.action == "Upgraded" } }.flatten.compact
|
123
|
+
end
|
124
|
+
def pkgs_rebuilt
|
125
|
+
@updates.map {|u| u.entries.map {|e| {:date => u.date, :entry => e } if e.action == "Rebuilt" } }.flatten.compact
|
126
|
+
end
|
114
127
|
def opts=(hash)
|
115
128
|
if hash.is_a?(Hash)
|
116
129
|
@opts = hash
|
117
130
|
end
|
118
131
|
end
|
119
132
|
|
120
|
-
def parse
|
121
|
-
|
133
|
+
def parse(opts = {:file => nil, :data => nil})
|
134
|
+
if not(opts[:file].nil?)
|
135
|
+
@updates = parse_this_file(opts[:file]).updates
|
136
|
+
elsif not(@file.nil?)
|
122
137
|
@updates = parse_this_file(@file).updates
|
123
138
|
end
|
124
139
|
return self
|
@@ -137,7 +152,7 @@ module Slackware
|
|
137
152
|
"#<%s:0x%x @file=%s, %d @updates, %d @entries>" % [self.class.name, self.object_id.abs, self.file || '""', self.updates.count || 0, self.entries.count || 0]
|
138
153
|
end
|
139
154
|
|
140
|
-
|
155
|
+
#protected
|
141
156
|
# Parse order is something like:
|
142
157
|
# * if its' a date match, store the date
|
143
158
|
# * take change notes until
|
@@ -3,30 +3,64 @@ require 'slackware/changelog'
|
|
3
3
|
|
4
4
|
module Slackware
|
5
5
|
class ChangeLog
|
6
|
-
|
6
|
+
# or maybe "http://connie.slackware.com/~msimons/slackware/grfx/shared/dobbslack1.jpg"
|
7
|
+
IMAGE_URL = "http://connie.slackware.com/~msimons/slackware/grfx/shared/bluepiSW.jpg"
|
8
|
+
def to_rss(opts = {})
|
9
|
+
# this way we can use the opts from super,
|
10
|
+
# or override for this methods
|
11
|
+
opts = @opts.merge(opts)
|
12
|
+
|
7
13
|
version = "2.0" # ["0.9", "1.0", "2.0"]
|
8
14
|
content = RSS::Maker.make(version) do |m|
|
9
|
-
|
10
|
-
|
11
|
-
|
15
|
+
if (opts[:title])
|
16
|
+
m.channel.title = opts[:title]
|
17
|
+
else
|
18
|
+
added_title = ""
|
19
|
+
if opts[:arch]
|
20
|
+
added_title = added_title + "slackware#{opts[:arch]}"
|
21
|
+
end
|
22
|
+
if opts[:version]
|
23
|
+
added_title = added_title + "-#{opts[:version]}"
|
24
|
+
end
|
25
|
+
|
26
|
+
if added_title.empty?
|
27
|
+
m.channel.title = "Slackware ChangeLog.txt"
|
28
|
+
else
|
29
|
+
m.channel.title = "#{added_title} ChangeLog.txt"
|
30
|
+
end
|
12
31
|
end
|
13
|
-
|
14
|
-
|
32
|
+
|
33
|
+
if (opts[:url])
|
34
|
+
m.channel.link = "%s#slackagg" % [opts[:url]]
|
35
|
+
else
|
36
|
+
m.channel.link = "http://www.slackware.com/#slackagg"
|
15
37
|
end
|
16
38
|
|
17
|
-
if
|
18
|
-
m.channel.
|
39
|
+
if (opts[:description])
|
40
|
+
m.channel.description = opts[:description]
|
19
41
|
else
|
20
|
-
m.channel.
|
42
|
+
m.channel.description = "a parsed ChangeLog.txt, is an extendable ChangeLog.txt"
|
21
43
|
end
|
22
|
-
|
23
|
-
|
44
|
+
|
45
|
+
if opts[:image_url]
|
46
|
+
m.channel.logo = opts[:image_url]
|
24
47
|
else
|
25
|
-
m.channel.
|
48
|
+
m.channel.logo = IMAGE_URL
|
49
|
+
end
|
50
|
+
|
51
|
+
if (opts[:noimage])
|
52
|
+
else
|
53
|
+
image = m.image
|
54
|
+
if opts[:image_url]
|
55
|
+
image.url = opts[:image_url]
|
56
|
+
else
|
57
|
+
image.url = IMAGE_URL
|
58
|
+
end
|
59
|
+
image.title = "Slackware Linux"
|
60
|
+
image.width = "144"
|
61
|
+
image.height = "144"
|
26
62
|
end
|
27
|
-
|
28
|
-
m.channel.logo = "http://connie.slackware.com/~msimons/slackware/grfx/shared/dobbslack1.jpg"
|
29
|
-
m.channel.description = "a parsed ChangeLog.txt, is an extendable ChangeLog.txt"
|
63
|
+
|
30
64
|
m.items.do_sort = true # sort items by date
|
31
65
|
|
32
66
|
@updates.each {|update|
|
@@ -39,8 +73,8 @@ module Slackware
|
|
39
73
|
else
|
40
74
|
i.title = update.date.utc.to_s
|
41
75
|
end
|
42
|
-
if
|
43
|
-
i.link = "%s#%s" % [
|
76
|
+
if opts[:url]
|
77
|
+
i.link = "%s#%s" % [opts[:url], update.date.to_i]
|
44
78
|
else
|
45
79
|
i.link = "http://slackware.com/#slackagg#%s" % [update.date.to_i]
|
46
80
|
end
|
@@ -49,9 +83,9 @@ module Slackware
|
|
49
83
|
i.description = ""
|
50
84
|
if (update.entries.count > 0)
|
51
85
|
if (security > 0)
|
52
|
-
i.description = "%d new update(s), %d security update(s)\n\n" % [update.entries.count, security]
|
86
|
+
i.description = i.description + "%d new update(s), %d security update(s)\n\n" % [update.entries.count, security]
|
53
87
|
else
|
54
|
-
i.description = "%d new update(s)\n\n" % [update.entries.count]
|
88
|
+
i.description = i.description + "%d new update(s)\n\n" % [update.entries.count]
|
55
89
|
end
|
56
90
|
end
|
57
91
|
i.description = i.description + "<pre><blockquote>\n"
|
data/lib/slackware/package.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
require 'time'
|
3
2
|
|
4
3
|
module Slackware
|
@@ -133,8 +132,8 @@ module Slackware
|
|
133
132
|
# Accessor for the FILE LIST from the package file
|
134
133
|
# unless the :owned_files symbol is populated
|
135
134
|
def get_owned_files
|
136
|
-
|
137
|
-
return
|
135
|
+
unless self.owned_files.nil?
|
136
|
+
return self.owned_files
|
138
137
|
else
|
139
138
|
f = File.open(self.path + '/' + self.fullname)
|
140
139
|
files = f.drop_while {|l| not( l =~ /^FILE LIST:/) }[2..-1].map {|l| l.chomp }
|
@@ -145,8 +144,8 @@ module Slackware
|
|
145
144
|
|
146
145
|
# Set the file list in the package object in memory
|
147
146
|
def set_owned_files
|
148
|
-
if
|
149
|
-
|
147
|
+
if self.owned_files.nil?
|
148
|
+
self.owned_files = get_owned_files()
|
150
149
|
return true
|
151
150
|
else
|
152
151
|
return false
|
@@ -176,7 +175,7 @@ module Slackware
|
|
176
175
|
end
|
177
176
|
|
178
177
|
def inspect
|
179
|
-
"#<%s:0x%x name
|
178
|
+
"#<%s:0x%x name=\"%s\" version=\"%s\" arch=\"%s\" build=%s tag=\"%s\">" % [
|
180
179
|
self.class.name,
|
181
180
|
self.object_id,
|
182
181
|
self.name,
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Slackware
|
2
|
+
class PackageBundle < Package
|
3
|
+
attr_accessor :archive
|
4
|
+
|
5
|
+
def initialize(name = nil)
|
6
|
+
super
|
7
|
+
end
|
8
|
+
|
9
|
+
def parse(name)
|
10
|
+
super(name)
|
11
|
+
if self.build =~ /^(\d+.*)\.(t[gx]z)$/
|
12
|
+
self.build = $1
|
13
|
+
self.archive = $2
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def self::get_file_list(pkg)
|
18
|
+
e_flag = ""
|
19
|
+
if pkg =~ /txz$/
|
20
|
+
e_flag = "J"
|
21
|
+
elsif pkg =~ /tgz$/
|
22
|
+
e_flag = "z"
|
23
|
+
elsif pkg =~ /tbz$/
|
24
|
+
e_flag = "j"
|
25
|
+
end
|
26
|
+
IO.popen("tar #{e_flag}wtf #{pkg}") {|f|
|
27
|
+
f.readlines.map {|l| l.chomp }
|
28
|
+
}
|
29
|
+
end
|
30
|
+
def get_slack_desc(pkg,file)
|
31
|
+
e_flag = ""
|
32
|
+
if pkg =~ /txz$/
|
33
|
+
e_flag = "J"
|
34
|
+
elsif pkg =~ /tgz$/
|
35
|
+
e_flag = "z"
|
36
|
+
elsif pkg =~ /tbz$/
|
37
|
+
e_flag = "j"
|
38
|
+
end
|
39
|
+
IO.popen("tar #{e_flag}xOf #{pkg} #{file}") {|f| f.readlines.map {|l| l.chomp } }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/slackware/repo.rb
CHANGED
@@ -40,7 +40,7 @@ module Slackware
|
|
40
40
|
a
|
41
41
|
end
|
42
42
|
else
|
43
|
-
## do some hot parsing of repo
|
43
|
+
## TODO do some hot parsing of 'repo'
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
@@ -57,7 +57,7 @@ module Slackware
|
|
57
57
|
if (file.nil?)
|
58
58
|
data = ftp.list('*')
|
59
59
|
else
|
60
|
-
data = ftp.
|
60
|
+
data = ftp.get(file, nil)
|
61
61
|
end
|
62
62
|
ftp.close
|
63
63
|
return data
|
@@ -86,29 +86,7 @@ module Slackware
|
|
86
86
|
def get_changelog
|
87
87
|
if (@changelog.nil?)
|
88
88
|
changelog = {}
|
89
|
-
|
90
|
-
actions = %w{removed added upgraded rebuilt}
|
91
|
-
actions.each {|action|
|
92
|
-
changelog[:"#{action}"] = changelog_date.map {|line|
|
93
|
-
if line =~ /^(\w+)\/(.*)\.t[gx]z:\s+#{action}\.?$/i
|
94
|
-
s = Slackware::Package.parse($2)
|
95
|
-
s.path = $1
|
96
|
-
if (self.mirror.nil?)
|
97
|
-
base_path= self.path
|
98
|
-
else
|
99
|
-
base_path= self.mirror + self.path
|
100
|
-
end
|
101
|
-
s.package_location = self.proto +
|
102
|
-
base_path +
|
103
|
-
"slackware" +
|
104
|
-
self.arch +
|
105
|
-
"-" +
|
106
|
-
self.version +
|
107
|
-
"/"
|
108
|
-
s
|
109
|
-
end
|
110
|
-
}.compact
|
111
|
-
}
|
89
|
+
changelog_data = fetch("ChangeLog.txt")
|
112
90
|
return changelog
|
113
91
|
else
|
114
92
|
return @changelog
|
@@ -155,7 +133,7 @@ module Slackware
|
|
155
133
|
|
156
134
|
def set_packages
|
157
135
|
@packages = get_packages
|
158
|
-
return
|
136
|
+
return @packages.count
|
159
137
|
end
|
160
138
|
|
161
139
|
end
|
data/lib/slackware/system.rb
CHANGED
@@ -10,12 +10,7 @@ module Slackware
|
|
10
10
|
RE_REMOVED_NAMES = /^(.*)-upgraded-(\d{4}-\d{2}-\d{2}),(\d{2}:\d{2}:\d{2})$/
|
11
11
|
RE_BUILD_TAG = /^([[:digit:]]+)([[:alpha:]]+)$/
|
12
12
|
|
13
|
-
def self::version
|
14
|
-
Slackware::VERSION
|
15
|
-
end
|
16
|
-
|
17
13
|
class System
|
18
|
-
|
19
14
|
def self::installed_packages
|
20
15
|
return Dir.glob(DIR_INSTALLED_PACKAGES + "/*").sort.map {|p| Slackware::Package.parse(p) }
|
21
16
|
end
|
@@ -157,7 +152,7 @@ module Slackware
|
|
157
152
|
|
158
153
|
# Return the version of Slackware Linux currently installed
|
159
154
|
def self::version
|
160
|
-
|
155
|
+
SLACKWARE_VERSION
|
161
156
|
end
|
162
157
|
end
|
163
158
|
|
data/lib/slackware/utils.rb
CHANGED
@@ -108,6 +108,18 @@ def print_packages_times(pkgs, epoch = false)
|
|
108
108
|
end
|
109
109
|
end
|
110
110
|
|
111
|
+
def print_packages_description(pkgs)
|
112
|
+
if (pkgs.count > 0 && pkgs.first.class == Slackware::Package)
|
113
|
+
pkgs.each {|pkg|
|
114
|
+
printf("%s: COMPRESSED SIZE: %s\n", pkg.fullname, pkg.compressed_size )
|
115
|
+
printf("%s: UNCOMPRESSED SIZE: %s\n", pkg.fullname, pkg.uncompressed_size )
|
116
|
+
pkg.package_description.each {|line|
|
117
|
+
printf("%s: %s\n", pkg.fullname, line )
|
118
|
+
}
|
119
|
+
}
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
111
123
|
# package file listing
|
112
124
|
def print_package_file_list(pkgs)
|
113
125
|
if (pkgs.count > 1)
|
data/lib/slackware/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slack-utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 5
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 6
|
9
|
-
-
|
10
|
-
version: 0.6.
|
9
|
+
- 1
|
10
|
+
version: 0.6.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Vincent Batts
|
@@ -24,6 +24,7 @@ description: " slack-utils is a means by which to access \n\
|
|
24
24
|
See the examples/ for more information.\n "
|
25
25
|
email: vbatts@hashbangbash.com
|
26
26
|
executables:
|
27
|
+
- sli
|
27
28
|
- slf
|
28
29
|
- slo
|
29
30
|
- sll
|
@@ -41,6 +42,7 @@ files:
|
|
41
42
|
- bin/slp
|
42
43
|
- bin/slo
|
43
44
|
- bin/sll
|
45
|
+
- bin/sli
|
44
46
|
- bin/slfindlinked
|
45
47
|
- examples/list_packages.rb
|
46
48
|
- examples/repo_difference.rb
|
@@ -51,6 +53,7 @@ files:
|
|
51
53
|
- lib/slackware/changelog.rb
|
52
54
|
- lib/slackware/changelog/rss.rb
|
53
55
|
- lib/slackware/package.rb
|
56
|
+
- lib/slackware/package_bundle.rb
|
54
57
|
- lib/slackware/repo.rb
|
55
58
|
- lib/slackware/version.rb
|
56
59
|
- lib/slackware/system.rb
|
@@ -63,7 +66,7 @@ rdoc_options:
|
|
63
66
|
- --main=README.rdoc
|
64
67
|
- --line-numbers
|
65
68
|
- --inline-source
|
66
|
-
- --title=Slackware utils (slack-utils) 0.6.
|
69
|
+
- --title=Slackware utils (slack-utils) 0.6.1 Documentation
|
67
70
|
require_paths:
|
68
71
|
- lib
|
69
72
|
required_ruby_version: !ruby/object:Gem::Requirement
|