lachlan-sprinkle 0.0.6 → 0.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/lib/sprinkle/package.rb +47 -36
- data/lib/sprinkle/policy.rb +10 -25
- data/lib/sprinkle/verify.rb +1 -1
- data/lib/sprinkle/version.rb +1 -1
- data/spec/sprinkle/verify_spec.rb +1 -1
- data/sprinkle.gemspec +2 -2
- metadata +2 -2
data/lib/sprinkle/package.rb
CHANGED
@@ -96,17 +96,34 @@ module Sprinkle
|
|
96
96
|
|
97
97
|
def package(name, metadata = {}, &block)
|
98
98
|
package = Package.new(name, metadata, &block)
|
99
|
-
PACKAGES[name]
|
100
|
-
|
101
|
-
if package.provides
|
102
|
-
(PACKAGES[package.provides] ||= []) << package
|
103
|
-
end
|
104
|
-
|
99
|
+
(PACKAGES[name] ||= []) << package
|
100
|
+
(PACKAGES[package.provides] ||= []) << package if package.provides
|
105
101
|
package
|
106
102
|
end
|
103
|
+
|
104
|
+
def find(name)
|
105
|
+
packages = PACKAGES[name]
|
106
|
+
if packages and packages.length > 1
|
107
|
+
selected = []
|
108
|
+
choose do |menu|
|
109
|
+
menu.header = "\nMultiple choices exist for package #{name}"
|
110
|
+
packages.sort!.each do |package|
|
111
|
+
menu.choice("#{package.name}#{' (' + package.version + ')' if package.version}") do
|
112
|
+
selected << package
|
113
|
+
end
|
114
|
+
end
|
115
|
+
menu.choice("all") do
|
116
|
+
selected = packages
|
117
|
+
end
|
118
|
+
end
|
119
|
+
packages = selected
|
120
|
+
end
|
121
|
+
packages
|
122
|
+
end
|
107
123
|
|
108
124
|
class Package #:nodoc:
|
109
125
|
include ArbitraryOptions
|
126
|
+
include Comparable
|
110
127
|
attr_accessor :name, :provides, :installer, :dependencies, :recommends, :verifications
|
111
128
|
|
112
129
|
def initialize(name, metadata = {}, &block)
|
@@ -185,7 +202,7 @@ module Sprinkle
|
|
185
202
|
def process(deployment, roles)
|
186
203
|
return if meta_package?
|
187
204
|
|
188
|
-
logger.info "\n#{self.
|
205
|
+
logger.info "\n#{self.to_s}"
|
189
206
|
# Run a pre-test to see if the software is already installed. If so,
|
190
207
|
# we can skip it, unless we have the force option turned on!
|
191
208
|
unless @verifications.empty? || Sprinkle::OPTIONS[:force]
|
@@ -233,45 +250,39 @@ module Sprinkle
|
|
233
250
|
def tree(depth = 1, &block)
|
234
251
|
packages = []
|
235
252
|
|
236
|
-
@recommends.each do |
|
237
|
-
|
238
|
-
next unless
|
239
|
-
|
240
|
-
|
253
|
+
@recommends.each do |name|
|
254
|
+
list = find(name)
|
255
|
+
next unless list # skip missing recommended packages as they can be optional
|
256
|
+
list.each { |package|
|
257
|
+
block.call(self, package, depth) if block
|
258
|
+
packages << package.tree(depth + 1, &block)
|
259
|
+
}
|
241
260
|
end
|
242
261
|
|
243
|
-
@dependencies.each do |
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
262
|
+
@dependencies.each do |name|
|
263
|
+
list = find(name)
|
264
|
+
raise "Package definition not found: #{name}" unless list
|
265
|
+
list.each { |package|
|
266
|
+
block.call(self, package, depth) if block
|
267
|
+
packages << package.tree(depth + 1, &block)
|
268
|
+
}
|
250
269
|
end
|
251
270
|
|
252
271
|
packages << self
|
253
272
|
end
|
254
273
|
|
255
|
-
def to_s
|
274
|
+
def to_s
|
275
|
+
s = @name.to_s
|
276
|
+
s << " (#{@version.to_s})" if @version
|
277
|
+
s
|
278
|
+
end
|
279
|
+
|
280
|
+
def <=>(other)
|
281
|
+
self.to_s <=> other.to_s
|
282
|
+
end
|
256
283
|
|
257
284
|
private
|
258
285
|
|
259
|
-
def select_package(name, packages)
|
260
|
-
if packages.size <= 1
|
261
|
-
package = packages.first
|
262
|
-
else
|
263
|
-
package = choose do |menu|
|
264
|
-
menu.prompt = "Multiple choices exist for virtual package #{name}"
|
265
|
-
menu.choices *packages.collect(&:to_s)
|
266
|
-
end
|
267
|
-
package = Sprinkle::Package::PACKAGES[package]
|
268
|
-
end
|
269
|
-
|
270
|
-
cloud_info "Selecting #{package.to_s} for virtual package #{name}"
|
271
|
-
|
272
|
-
package
|
273
|
-
end
|
274
|
-
|
275
286
|
def meta_package?
|
276
287
|
@installer == nil
|
277
288
|
end
|
data/lib/sprinkle/policy.rb
CHANGED
@@ -76,16 +76,17 @@ module Sprinkle
|
|
76
76
|
|
77
77
|
@packages.each do |p|
|
78
78
|
cloud_info "\nPolicy #{@name} requires package #{p}"
|
79
|
+
|
80
|
+
list = Sprinkle::Package.find(p)
|
81
|
+
raise "Package definition not found: #{p}" unless list
|
79
82
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
tree = package.tree do |parent, child, depth|
|
85
|
-
indent = "\t" * depth; cloud_info "#{indent}Package #{parent.name} requires #{child.name}"
|
86
|
-
end
|
83
|
+
list.each { |package|
|
84
|
+
tree = package.tree do |parent, child, depth|
|
85
|
+
indent = "\t" * depth; cloud_info "#{indent}Package #{parent.to_s} requires #{child.to_s}"
|
86
|
+
end
|
87
87
|
|
88
|
-
|
88
|
+
all << tree
|
89
|
+
}
|
89
90
|
end
|
90
91
|
|
91
92
|
normalize(all) do |package|
|
@@ -99,25 +100,9 @@ module Sprinkle
|
|
99
100
|
logger.info(message) if Sprinkle::OPTIONS[:cloud] or logger.debug?
|
100
101
|
end
|
101
102
|
|
102
|
-
def select_package(name, packages)
|
103
|
-
if packages.size <= 1
|
104
|
-
package = packages.first
|
105
|
-
else
|
106
|
-
package = choose do |menu|
|
107
|
-
menu.prompt = "Multiple choices exist for virtual package #{name}"
|
108
|
-
menu.choices *packages.collect(&:to_s)
|
109
|
-
end
|
110
|
-
package = Sprinkle::Package::PACKAGES[package]
|
111
|
-
end
|
112
|
-
|
113
|
-
cloud_info "Selecting #{package.to_s} for virtual package #{name}"
|
114
|
-
|
115
|
-
package
|
116
|
-
end
|
117
|
-
|
118
103
|
def normalize(all, &block)
|
119
104
|
all = all.flatten.uniq
|
120
|
-
cloud_info "\n--> Normalized installation order for all packages: #{all.
|
105
|
+
cloud_info "\n--> Normalized installation order for all packages: #{all.map(&:to_s).join(', ')}"
|
121
106
|
all.each &block
|
122
107
|
end
|
123
108
|
end
|
data/lib/sprinkle/verify.rb
CHANGED
@@ -101,7 +101,7 @@ module Sprinkle
|
|
101
101
|
attr_accessor :package, :commands
|
102
102
|
|
103
103
|
def initialize(package, commands)
|
104
|
-
super("Verifying #{package.name} failed: #{commands.join(RUBY_PLATFORM =~ /win32/ ? ' & ' : '; ')}")
|
104
|
+
super("Verifying #{package.name} failed: #{Array(commands).join(RUBY_PLATFORM =~ /win32/ ? ' & ' : '; ')}")
|
105
105
|
|
106
106
|
@package = package
|
107
107
|
@commands = commands
|
data/lib/sprinkle/version.rb
CHANGED
@@ -140,7 +140,7 @@ describe Sprinkle::Verify do
|
|
140
140
|
end
|
141
141
|
|
142
142
|
it 'should print the install sequence to the console' do
|
143
|
-
@verification.should_receive(:logger).
|
143
|
+
@verification.should_receive(:logger).once.and_return(@logger)
|
144
144
|
end
|
145
145
|
|
146
146
|
after do
|
data/sprinkle.gemspec
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = %q{sprinkle}
|
3
|
-
s.version = "0.0.
|
3
|
+
s.version = "0.0.7"
|
4
4
|
|
5
5
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
6
6
|
s.authors = ["Marcus Crafter", "Mitchell Hashimoto"]
|
7
|
-
s.date = %q{2009-03-
|
7
|
+
s.date = %q{2009-03-30}
|
8
8
|
s.default_executable = %q{sprinkle}
|
9
9
|
s.description = %q{Ruby DSL based software provisioning tool}
|
10
10
|
s.email = ["crafterm@redartisan.com", "mitchell.hashimoto@citrusbyte.com"]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lachlan-sprinkle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marcus Crafter
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-03-
|
13
|
+
date: 2009-03-30 00:00:00 -07:00
|
14
14
|
default_executable: sprinkle
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|