slack-utils 0.6.2 → 0.7
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.
- data/README.rdoc +9 -20
- data/bin/slf +23 -11
- data/bin/slfindlinked +1 -1
- data/bin/sli +22 -10
- data/bin/sll +22 -9
- data/bin/slo +17 -5
- data/bin/slp +22 -10
- data/bin/slt +21 -11
- data/examples/before_then.rb +1 -0
- data/examples/list_packages.rb +4 -3
- data/examples/repo.rb +1 -0
- data/examples/repo_difference.rb +1 -0
- data/lib/slackware/args.rb +80 -73
- data/lib/slackware/changelog/rss.rb +3 -0
- data/lib/slackware/changelog.rb +15 -12
- data/lib/slackware/log.rb +53 -0
- data/lib/slackware/package.rb +232 -203
- data/lib/slackware/package_bundle.rb +43 -40
- data/lib/slackware/paths.rb +57 -0
- data/lib/slackware/repo.rb +134 -129
- data/lib/slackware/system.rb +179 -153
- data/lib/slackware/utils.rb +247 -244
- data/lib/slackware/version.rb +12 -9
- data/lib/slackware.rb +24 -0
- metadata +5 -3
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
1
3
|
# Copyright 2010,2011 Vincent Batts, Vienna, VA
|
2
4
|
# All rights reserved.
|
3
5
|
#
|
@@ -19,12 +21,12 @@
|
|
19
21
|
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
20
22
|
|
21
23
|
module Slackware
|
22
|
-
|
24
|
+
class PackageBundle < Package
|
23
25
|
attr_accessor :archive
|
24
26
|
|
25
|
-
|
26
|
-
|
27
|
-
|
27
|
+
def initialize(name = nil)
|
28
|
+
super
|
29
|
+
end
|
28
30
|
|
29
31
|
def parse(name)
|
30
32
|
super(name)
|
@@ -37,49 +39,50 @@ module Slackware
|
|
37
39
|
end
|
38
40
|
end
|
39
41
|
|
40
|
-
|
42
|
+
def get_file_list
|
41
43
|
pkg = "%s/%s.%s" % [self.path, self.fullname, self.archive]
|
42
44
|
return nil unless File.exist?(pkg)
|
43
45
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
46
|
+
e_flag = ""
|
47
|
+
if pkg =~ /txz$/
|
48
|
+
e_flag = "J"
|
49
|
+
elsif pkg =~ /tgz$/
|
50
|
+
e_flag = "z"
|
51
|
+
elsif pkg =~ /tbz$/
|
52
|
+
e_flag = "j"
|
53
|
+
end
|
54
|
+
IO.popen("tar #{e_flag}wtf #{pkg}") {|f|
|
55
|
+
f.readlines.map {|l| l.chomp }
|
56
|
+
}
|
57
|
+
end
|
56
58
|
|
57
|
-
|
59
|
+
def read_file(file)
|
58
60
|
pkg = "%s/%s.%s" % [self.path, self.fullname, self.archive]
|
59
61
|
return nil unless File.exist?(pkg)
|
60
62
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
63
|
+
e_flag = ""
|
64
|
+
if pkg =~ /txz$/
|
65
|
+
e_flag = "J"
|
66
|
+
elsif pkg =~ /tgz$/
|
67
|
+
e_flag = "z"
|
68
|
+
elsif pkg =~ /tbz$/
|
69
|
+
e_flag = "j"
|
70
|
+
end
|
71
|
+
IO.popen("tar #{e_flag}xOf #{pkg} #{file}") {|f| f.read }
|
72
|
+
end
|
71
73
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
74
|
+
def inspect
|
75
|
+
"#<%s:0x%x name=%s version=%s arch=%s build=%s tag=%s archive=%s>" % [
|
76
|
+
self.class.name,
|
77
|
+
self.object_id,
|
78
|
+
self.name.inspect,
|
79
|
+
self.version.inspect,
|
80
|
+
self.arch.inspect,
|
81
|
+
self.build,
|
82
|
+
self.tag.inspect,
|
81
83
|
self.archive.inspect
|
82
|
-
|
83
|
-
|
84
|
-
|
84
|
+
]
|
85
|
+
end
|
86
|
+
end
|
85
87
|
end
|
88
|
+
# vim : set sw=2 sts=2 et :
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# Copyright 2010,2011,2012 Vincent Batts, Vienna, VA
|
2
|
+
# All rights reserved.
|
3
|
+
#
|
4
|
+
# Redistribution and use of this source, with or without modification, is
|
5
|
+
# permitted provided that the following conditions are met:
|
6
|
+
#
|
7
|
+
# 1. Redistributions of this source must retain the above copyright
|
8
|
+
# notice, this list of conditions and the following disclaimer.
|
9
|
+
#
|
10
|
+
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED
|
11
|
+
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
12
|
+
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
13
|
+
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
14
|
+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
15
|
+
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
16
|
+
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
17
|
+
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
18
|
+
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
19
|
+
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
20
|
+
|
21
|
+
module Slackware
|
22
|
+
module Paths
|
23
|
+
INSTALLED_PACKAGES = "/var/log/packages"
|
24
|
+
REMOVED_PACKAGES = "/var/log/removed_packages"
|
25
|
+
INSTALLED_SCRIPTS = "/var/log/scripts"
|
26
|
+
REMOVED_SCRIPTS = "/var/log/removed_scripts"
|
27
|
+
VERSION_FILE = "/etc/slackware-version"
|
28
|
+
|
29
|
+
# A helper to return the ROOT directory of the system in question.
|
30
|
+
# Like pkgtools, if the environment has "ROOT" set, use it, otherwise "/"
|
31
|
+
def self::root_dir()
|
32
|
+
return ENV["ROOT"] ? ENV["ROOT"] : "/"
|
33
|
+
end
|
34
|
+
|
35
|
+
def self::installed_packages(*args)
|
36
|
+
return File.join(root_dir, INSTALLED_PACKAGES, args)
|
37
|
+
end
|
38
|
+
|
39
|
+
def self::removed_packages(*args)
|
40
|
+
return File.join(root_dir, REMOVED_PACKAGES, args)
|
41
|
+
end
|
42
|
+
|
43
|
+
def self::installed_scripts(*args)
|
44
|
+
return File.join(root_dir, INSTALLED_SCRIPTS, args)
|
45
|
+
end
|
46
|
+
|
47
|
+
def self::removed_scripts(*args)
|
48
|
+
return File.join(root_dir, REMOVED_SCRIPTS, args)
|
49
|
+
end
|
50
|
+
|
51
|
+
def self::slackware_version()
|
52
|
+
return File.join(root_dir, VERSION_FILE)
|
53
|
+
end
|
54
|
+
end # module Paths
|
55
|
+
end # module Slackware
|
56
|
+
|
57
|
+
# vim : set sw=2 sts=2 et :
|
data/lib/slackware/repo.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
1
3
|
# Copyright 2010,2011 Vincent Batts, Vienna, VA
|
2
4
|
# All rights reserved.
|
3
5
|
#
|
@@ -19,144 +21,147 @@
|
|
19
21
|
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
20
22
|
|
21
23
|
require 'slackware/package'
|
24
|
+
require 'slackware/log'
|
22
25
|
require 'slackware/changelog'
|
23
26
|
require 'slackware/system'
|
27
|
+
|
24
28
|
require 'net/http'
|
25
29
|
require 'net/ftp'
|
26
30
|
require 'rbconfig'
|
27
31
|
|
28
32
|
module Slackware
|
29
33
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
34
|
+
# Stub
|
35
|
+
class Repo
|
36
|
+
RE_PACKAGE_NAME = /^PACKAGE NAME:\s+(.*)\.t[gbx]z\s*/
|
37
|
+
RE_PACKAGE_LOCATION = /^PACKAGE LOCATION:\s+(.*)$/
|
38
|
+
RE_COMPRESSED_SIZE = /^PACKAGE SIZE \(compressed\):\s+(.*)$/
|
39
|
+
RE_UNCOMPRESSED_SIZE = /^PACKAGE SIZE \(uncompressed\):\s+(.*)$/
|
40
|
+
|
41
|
+
attr_accessor :proto, :mirror, :path, :version, :arch, :changelog, :packages
|
42
|
+
|
43
|
+
def initialize(repo = nil)
|
44
|
+
@packages = nil
|
45
|
+
if (repo.nil?)
|
46
|
+
self.proto = "ftp://"
|
47
|
+
self.mirror = "ftp.osuosl.org"
|
48
|
+
self.path = "/pub/slackware/"
|
49
|
+
self.version = begin
|
50
|
+
v = Slackware::System.version
|
51
|
+
if v =~ /(\d+)\.(\d+)\.\d+/
|
52
|
+
v = $1 + "." + $2
|
53
|
+
end
|
54
|
+
v
|
55
|
+
end
|
56
|
+
self.arch = begin
|
57
|
+
a = RbConfig::CONFIG["arch"]
|
58
|
+
if a =~ /x86_64/
|
59
|
+
a = "64"
|
60
|
+
else
|
61
|
+
a = ""
|
62
|
+
end
|
63
|
+
a
|
64
|
+
end
|
65
|
+
else
|
66
|
+
## TODO do some hot parsing of 'repo'
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def fetch(file = nil)
|
71
|
+
#if file.nil?
|
72
|
+
#url = URI.parse(self.proto + self.mirror + self.path)
|
73
|
+
#else
|
74
|
+
#url = URI.parse(self.proto + self.mirror + self.path + file)
|
75
|
+
#end
|
76
|
+
if self.proto =~ /ftp/
|
77
|
+
ftp = Net::FTP.open(self.mirror)
|
78
|
+
ftp.login
|
79
|
+
ftp.chdir(self.path + "slackware" + self.arch + "-" + self.version)
|
80
|
+
if (file.nil?)
|
81
|
+
data = ftp.list('*')
|
82
|
+
else
|
83
|
+
data = ftp.get(file, nil)
|
84
|
+
end
|
85
|
+
ftp.close
|
86
|
+
return data
|
87
|
+
elsif self.proto =~ /http/
|
88
|
+
# XXX this is not working yet
|
89
|
+
req = Net::HTTP::Get.new(url.path)
|
90
|
+
res = Net::HTTP.start(url.host, url.port) {|http| http.request(req) }
|
91
|
+
return res
|
92
|
+
elsif self.proto =~ /file/
|
93
|
+
if (file.nil?)
|
94
|
+
return Dir.glob(self.path + "slackware" + self.arch + "-" + self.version + "/*")
|
95
|
+
else
|
96
|
+
return File.read(self.path + "slackware" + self.arch + "-" + self.version + "/" + file)
|
97
|
+
end
|
98
|
+
else
|
99
|
+
return nil
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
# Pkg count that _should_ be removed
|
104
|
+
# pkgs = Slackware::System.installed_packages
|
105
|
+
# sr = Slackware::Repo.new
|
106
|
+
# sr.version = "current"
|
107
|
+
# c = get_changelog
|
108
|
+
#(pkgs.map {|p| p.fullname } & c[:removed].map {|p| p.fullname }).count
|
109
|
+
def get_changelog
|
110
|
+
if (@changelog.nil?)
|
111
|
+
changelog = {}
|
112
|
+
changelog_data = fetch("ChangeLog.txt")
|
113
|
+
return changelog
|
114
|
+
else
|
115
|
+
return @changelog
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def set_changelog
|
120
|
+
@changelog = get_changelog
|
121
|
+
return nil
|
122
|
+
end
|
123
|
+
|
124
|
+
def get_packages
|
125
|
+
if (@packages.nil?)
|
126
|
+
pkgs = []
|
127
|
+
fetch("PACKAGES.TXT").split(/\n\n/).each {|p_block|
|
128
|
+
p_block = p_block.split(/\n/).reject {|cell| cell if cell == "" }
|
129
|
+
if (p_block.shift =~ RE_PACKAGE_NAME)
|
130
|
+
pkg = Slackware::Package.parse($1)
|
131
|
+
|
132
|
+
p_block.shift =~ RE_PACKAGE_LOCATION
|
133
|
+
pkg.package_location = $1
|
134
|
+
|
135
|
+
p_block.shift =~ RE_COMPRESSED_SIZE
|
136
|
+
pkg.compressed_size = $1
|
137
|
+
|
138
|
+
p_block.shift =~ RE_UNCOMPRESSED_SIZE
|
139
|
+
pkg.uncompressed_size = $1
|
140
|
+
|
141
|
+
# This is the empty PACKAGE DESCRIPTON: tag
|
142
|
+
p_block.shift
|
143
|
+
|
144
|
+
pkg.package_description = p_block.map {|cell|
|
145
|
+
cell.sub(/^#{pkg.name}:\s*/, '')
|
146
|
+
}
|
147
|
+
|
148
|
+
pkgs << pkg
|
149
|
+
end
|
150
|
+
}
|
151
|
+
return pkgs
|
152
|
+
else
|
153
|
+
return @packages
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
def set_packages
|
158
|
+
@packages = get_packages
|
159
|
+
return @packages.count
|
160
|
+
end
|
161
|
+
|
162
|
+
end
|
159
163
|
|
160
164
|
|
161
165
|
end
|
162
166
|
|
167
|
+
# vim : set sw=2 sts=2 et :
|
data/lib/slackware/system.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
#
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Copyright 2010,2011,2012 Vincent Batts, Vienna, VA
|
2
4
|
# All rights reserved.
|
3
5
|
#
|
4
6
|
# Redistribution and use of this source, with or without modification, is
|
@@ -19,161 +21,185 @@
|
|
19
21
|
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
20
22
|
|
21
23
|
require 'slackware/version'
|
24
|
+
require 'slackware/paths'
|
22
25
|
require 'slackware/package'
|
26
|
+
require 'slackware/log'
|
23
27
|
|
24
28
|
module Slackware
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
29
|
+
|
30
|
+
RE_REMOVED_NAMES = /^(.*)-upgraded-(\d{4}-\d{2}-\d{2}),(\d{2}:\d{2}:\d{2})$/
|
31
|
+
RE_BUILD_TAG = /^([[:digit:]]+)([[:alpha:]]+)$/
|
32
|
+
|
33
|
+
FMT_UPGRADE_TIME = "%F %H:%M:%S"
|
34
|
+
|
35
|
+
class System
|
36
|
+
|
37
|
+
# A debug log helper
|
38
|
+
def self::debug(msg)
|
39
|
+
Slackware::Log.instance.debug(self.name) { msg }
|
40
|
+
end
|
41
|
+
|
42
|
+
def self::installed_packages
|
43
|
+
path = Paths::installed_packages("*")
|
44
|
+
return Dir.glob(path).sort.map {|p| Package.parse(p) }
|
45
|
+
end
|
46
|
+
|
47
|
+
def self::removed_packages
|
48
|
+
path = Paths::removed_packages("*")
|
49
|
+
return Dir.glob(path).sort.map {|p| Package.parse(p) }
|
50
|
+
end
|
51
|
+
|
52
|
+
def self::installed_scripts
|
53
|
+
path = Paths::installed_scripts("*")
|
54
|
+
return Dir.glob(path).sort.map {|s| Script.parse(s) }
|
55
|
+
end
|
56
|
+
|
57
|
+
def self::removed_scripts
|
58
|
+
path = Paths::removed_scripts("*")
|
59
|
+
return Dir.glob(path).sort.map {|s| Script.parse(s) }
|
60
|
+
end
|
61
|
+
|
62
|
+
def self::tags_used
|
63
|
+
pkgs = installed_packages()
|
64
|
+
set = []
|
65
|
+
pkgs.map {|p| p.tag }.uniq.each {|tag|
|
66
|
+
m_set = {}
|
67
|
+
m_set[:tag] = tag
|
68
|
+
m_set[:count] = pkgs.select {|p| p.tag == tag }.count
|
69
|
+
set << m_set
|
70
|
+
}
|
71
|
+
return set
|
72
|
+
end
|
73
|
+
|
74
|
+
def self::with_tag(tag)
|
75
|
+
return installed_packages().select {|pkg| pkg.tag == tag }
|
76
|
+
end
|
77
|
+
|
78
|
+
def self::arch_used
|
79
|
+
return installed_packages().map {|p| p.arch }.uniq
|
80
|
+
end
|
81
|
+
|
82
|
+
def self::with_arch(arch)
|
83
|
+
return installed_packages().select {|pkg| pkg.arch == arch }
|
84
|
+
end
|
85
|
+
|
86
|
+
def self::find_installed(name)
|
87
|
+
d = Dir.new(Paths::installed_packages())
|
88
|
+
return d.select {|p| p.include?(name) }.map {|p| Package.parse(p) }
|
89
|
+
end
|
90
|
+
|
91
|
+
def self::find_removed(name)
|
92
|
+
d = Dir.new(Paths::removed_packages())
|
93
|
+
return d.select {|p| p.include?(name) }.map {|p| Package.parse(p) }
|
94
|
+
end
|
95
|
+
|
96
|
+
# Returns a list of the upgrades for a particular package name
|
97
|
+
# Example:
|
98
|
+
# Slackware::System.upgrades("xz")
|
99
|
+
# => [#<Slackware::Package:0x981e6c name="xz" version="5.0.0" arch="x86_64" build=1 tag="">,
|
100
|
+
# #<Slackware::Package:0x97e04c name="xz" version="4.999.9beta" arch="x86_64" build=1 tag="">]
|
101
|
+
# Slackware::System.upgrades("fart")
|
102
|
+
# => []
|
103
|
+
def self::upgrades(pkg)
|
104
|
+
find_removed(pkg).select {|p| (p.name == pkg) }
|
105
|
+
end
|
106
|
+
|
107
|
+
# Return an Array of packages, that were installed after provided +time+
|
108
|
+
# ("installed" meaning the file's mtime)
|
109
|
+
def self::installed_after(time)
|
110
|
+
arr = []
|
111
|
+
Dir.new(Paths::installed_packages()).each {|p|
|
112
|
+
if (File.mtime(Paths::installed_packages(p)) >= time)
|
113
|
+
pkg = Package.parse(p)
|
114
|
+
pkg.get_time
|
115
|
+
arr << pkg
|
116
|
+
end
|
117
|
+
}
|
118
|
+
return arr
|
119
|
+
end
|
120
|
+
|
121
|
+
# Return an Array of packages, that were installed before provided +time+
|
122
|
+
# ("installed" meaning the file's mtime)
|
123
|
+
def self::installed_before(time)
|
124
|
+
arr = []
|
125
|
+
Dir.new(Paths::installed_packages()).each {|p|
|
126
|
+
if (File.mtime(Paths::installed_packages(p)) <= time)
|
127
|
+
pkg = Package.parse(p)
|
128
|
+
pkg.get_time
|
129
|
+
arr << pkg
|
130
|
+
end
|
131
|
+
}
|
132
|
+
return arr
|
133
|
+
end
|
134
|
+
|
135
|
+
# Return an Array of packages, that were removed after provided +time+
|
136
|
+
def self::removed_after(time)
|
137
|
+
arr = []
|
138
|
+
Dir.new(Paths::removed_packages()).each {|p|
|
139
|
+
if (Paths::installed_packages(p) =~ RE_REMOVED_NAMES)
|
140
|
+
if (Time.strptime($2 + ' ' + $3, fmt=FMT_UPGRADE_TIME) >= time)
|
141
|
+
arr << Package.parse(p)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
}
|
145
|
+
return arr
|
146
|
+
end
|
147
|
+
|
148
|
+
# Return an Array of packages, that were removed before provided +time+
|
149
|
+
def self::removed_before(time)
|
150
|
+
arr = []
|
151
|
+
Dir.new(Paths::removed_packages()).each {|p|
|
152
|
+
if (Paths::installed_packages(p) =~ RE_REMOVED_NAMES)
|
153
|
+
if (Time.strptime($2 + ' ' + $3, fmt=FMT_UPGRADE_TIME) <= time)
|
154
|
+
arr << Package.parse(p)
|
155
|
+
end
|
156
|
+
end
|
157
|
+
}
|
158
|
+
return arr
|
159
|
+
end
|
160
|
+
|
161
|
+
# Check whether a given Slackware::Package has been upgraded before
|
162
|
+
def self::is_upgraded?(pkg)
|
163
|
+
if (find_removed(pkg).map {|p| p.name if p.upgrade_time }.include?(pkg) )
|
164
|
+
return true
|
165
|
+
else
|
166
|
+
return false
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
# Search installation of Slackware::Package's for what owns the questioned file
|
171
|
+
# Returns an Array, of matching pairs. The pairs are [Slackware::Package, <matching file>]
|
172
|
+
def self::owns_file(file)
|
173
|
+
pkgs = installed_packages()
|
174
|
+
debug('owns_file(): pkgs.count => %d' % pkgs.count)
|
175
|
+
found_files = []
|
176
|
+
file = file.sub(/^\//, "") # clean off the leading '/'
|
177
|
+
re = /#{file}/
|
178
|
+
debug('owns_file(): file Regexp => %s' % re.inspect)
|
179
|
+
pkgs.each {|pkg|
|
180
|
+
pkg.get_owned_files().select {|f|
|
181
|
+
begin
|
182
|
+
f =~ re
|
183
|
+
rescue ArgumentError => ex
|
184
|
+
Log.instance.debug(self.name) {
|
185
|
+
"encoding mismatch: " + f
|
186
|
+
}
|
187
|
+
false # this needs to return false, for the .select
|
188
|
+
end
|
189
|
+
}.each do |f|
|
190
|
+
found_files << [pkg, f]
|
191
|
+
end
|
192
|
+
}
|
193
|
+
return found_files
|
194
|
+
end
|
195
|
+
|
196
|
+
# Return the version of Slackware Linux currently installed
|
197
|
+
def self::version
|
198
|
+
debug(SLACKWARE_VERSION)
|
199
|
+
SLACKWARE_VERSION
|
200
|
+
end
|
201
|
+
end
|
177
202
|
|
178
203
|
end
|
179
204
|
|
205
|
+
# vim: set sw=2 sts=2 et:
|