batali 0.1.14 → 0.1.16
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/lib/batali/b_file.rb +1 -1
- data/lib/batali/command/resolve.rb +71 -49
- data/lib/batali/manifest.rb +3 -2
- data/lib/batali/version.rb +1 -1
- 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: c69ca3a698a94a1797c499c491e9a50f69bc8d3b
|
4
|
+
data.tar.gz: 781d13d797963bdb886c0a22f219bee3e161bd2b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c56fcd91bb80bcafdc94f5a5b13ff3db00f32066e754ec92a249f7d488b4da23a97bb0d2662fee2feab71408493d88289e7f06209545d68baac704c43f3ad69
|
7
|
+
data.tar.gz: 1c171c5155f4ce221809273e899a6daa8a551aabc7fdfb25a14ae48617bc5e114fa5dabedc5e6f87431c00dab6a5e8093d2e27cac25fc0a9e57bd84076c928b1
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
# v0.1.16
|
2
|
+
* Include cookbook removals on resolve output
|
3
|
+
* Add initial infrastructure resolve output to show cookbooks + versions
|
4
|
+
* Update restrictions to use `:source` instead of `:to` for source reference
|
5
|
+
|
1
6
|
# v0.1.14
|
2
7
|
* Start adding debug and verbose output (#9)
|
3
8
|
* Update exception messages to provide more clarity
|
data/lib/batali/b_file.rb
CHANGED
@@ -81,7 +81,7 @@ module Batali
|
|
81
81
|
end
|
82
82
|
|
83
83
|
attribute :restrict, Restriction, :multiple => true, :coerce => lambda{|v|
|
84
|
-
Restriction.new(:cookbook => v.first, :source => v.last.to_smash[:
|
84
|
+
Restriction.new(:cookbook => v.first, :source => v.last.to_smash[:source])
|
85
85
|
}
|
86
86
|
attribute :source, Origin::RemoteSite, :multiple => true, :coerce => lambda{|v|
|
87
87
|
args = Smash.new(:endpoint => v.first)
|
@@ -30,56 +30,9 @@ module Batali
|
|
30
30
|
:score_keeper => score_keeper
|
31
31
|
)
|
32
32
|
if(opts[:infrastructure])
|
33
|
-
|
34
|
-
run_action 'Writing infrastructure manifest file' do
|
35
|
-
File.open('batali.manifest', 'w') do |file|
|
36
|
-
manifest = Manifest.new(:cookbook => solv.world.units.values.flatten)
|
37
|
-
file.write MultiJson.dump(manifest, :pretty => true)
|
38
|
-
nil
|
39
|
-
end
|
40
|
-
end
|
33
|
+
infrastructure_resolution(solv)
|
41
34
|
else
|
42
|
-
|
43
|
-
[manifest.cookbook].flatten.compact.map do |unit|
|
44
|
-
[unit.name, unit.version]
|
45
|
-
end
|
46
|
-
]
|
47
|
-
ui.info 'Performing single path resolution.'
|
48
|
-
results = []
|
49
|
-
run_action 'Resolving dependency constraints' do
|
50
|
-
results = solv.generate!
|
51
|
-
nil
|
52
|
-
end
|
53
|
-
if(results.empty?)
|
54
|
-
ui.error 'No solutions found defined requirements!'
|
55
|
-
else
|
56
|
-
ideal_solution = results.pop
|
57
|
-
dry_run('manifest file write') do
|
58
|
-
run_action 'Writing manifest' do
|
59
|
-
manifest = Manifest.new(:cookbook => ideal_solution.units)
|
60
|
-
File.open('batali.manifest', 'w') do |file|
|
61
|
-
file.write MultiJson.dump(manifest, :pretty => true)
|
62
|
-
end
|
63
|
-
nil
|
64
|
-
end
|
65
|
-
end
|
66
|
-
# ui.info "Number of solutions collected for defined requirements: #{results.size + 1}"
|
67
|
-
ui.info 'Ideal solution:'
|
68
|
-
ideal_solution.units.sort_by(&:name).map do |unit|
|
69
|
-
output_args = ["#{unit.name} <#{unit.version}>"]
|
70
|
-
unless(original_units.empty?)
|
71
|
-
if(original_units[unit.name])
|
72
|
-
unless(original_units[unit.name] == unit.version)
|
73
|
-
output_args.first.replace "#{unit.name} <#{original_units[unit.name]} -> #{unit.version}>"
|
74
|
-
output_args.push(:yellow)
|
75
|
-
end
|
76
|
-
else
|
77
|
-
output_args.push(:green)
|
78
|
-
end
|
79
|
-
end
|
80
|
-
ui.puts ui.color(*output_args)
|
81
|
-
end
|
82
|
-
end
|
35
|
+
single_path_resolution(solv)
|
83
36
|
end
|
84
37
|
end
|
85
38
|
|
@@ -97,6 +50,75 @@ module Batali
|
|
97
50
|
end
|
98
51
|
end
|
99
52
|
|
53
|
+
# Generate manifest comprised of units for single path resolution
|
54
|
+
#
|
55
|
+
# @param solv [Grimoire::Solver]
|
56
|
+
# @return [TrueClass]
|
57
|
+
def single_path_resolution(solv)
|
58
|
+
original_units = Smash[
|
59
|
+
[manifest.cookbook].flatten.compact.map do |unit|
|
60
|
+
[unit.name, unit.version]
|
61
|
+
end
|
62
|
+
]
|
63
|
+
ui.info 'Performing single path resolution.'
|
64
|
+
results = []
|
65
|
+
run_action 'Resolving dependency constraints' do
|
66
|
+
results = solv.generate!
|
67
|
+
nil
|
68
|
+
end
|
69
|
+
if(results.empty?)
|
70
|
+
ui.error 'No solutions found defined requirements!'
|
71
|
+
else
|
72
|
+
ideal_solution = results.pop
|
73
|
+
dry_run('manifest file write') do
|
74
|
+
run_action 'Writing manifest' do
|
75
|
+
manifest = Manifest.new(:cookbook => ideal_solution.units)
|
76
|
+
File.open('batali.manifest', 'w') do |file|
|
77
|
+
file.write MultiJson.dump(manifest, :pretty => true)
|
78
|
+
end
|
79
|
+
nil
|
80
|
+
end
|
81
|
+
end
|
82
|
+
# ui.info "Number of solutions collected for defined requirements: #{results.size + 1}"
|
83
|
+
ui.info 'Ideal solution:'
|
84
|
+
solution = Smash[ideal_solution.units.map{|unit| [unit.name, unit.version]}]
|
85
|
+
(original_units.keys + solution.keys).compact.uniq.sort.each do |unit_name|
|
86
|
+
if(original_units[unit_name])
|
87
|
+
if(solution[unit_name])
|
88
|
+
if(solution[unit_name] == original_units[unit_name])
|
89
|
+
ui.puts "#{unit_name} <#{solution[unit_name]}>"
|
90
|
+
else
|
91
|
+
ui.puts ui.color("#{unit_name} <#{original_units[unit_name]} -> #{solution[unit_name]}>", :yellow)
|
92
|
+
end
|
93
|
+
else
|
94
|
+
ui.puts ui.color("#{unit_name} <#{original_units[unit_name]}>", :red)
|
95
|
+
end
|
96
|
+
else
|
97
|
+
ui.puts ui.color("#{unit_name} <#{solution[unit_name]}>", :green)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
# Generate manifest comprised of units for entire infrastructure
|
104
|
+
#
|
105
|
+
# @param solv [Grimoire::Solver]
|
106
|
+
# @return [TrueClass]
|
107
|
+
def infrastructure_resolution(solv)
|
108
|
+
ui.info 'Performing infrastructure path resolution.'
|
109
|
+
run_action 'Writing infrastructure manifest file' do
|
110
|
+
File.open(manifest.path, 'w') do |file|
|
111
|
+
manifest = Manifest.new(:cookbook => solv.world.units.values.flatten)
|
112
|
+
file.write MultiJson.dump(manifest, :pretty => true)
|
113
|
+
nil
|
114
|
+
end
|
115
|
+
end
|
116
|
+
ui.info 'Infrastructure manifest solution:'
|
117
|
+
solv.world.units.sort_by(&:first).each do |name, units|
|
118
|
+
ui.puts "#{name} <#{units.map(&:version).sort.map(&:to_s).join(', ')}>"
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
100
122
|
end
|
101
123
|
|
102
124
|
end
|
data/lib/batali/manifest.rb
CHANGED
@@ -6,6 +6,7 @@ module Batali
|
|
6
6
|
|
7
7
|
include Bogo::Memoization
|
8
8
|
|
9
|
+
attribute :path, String
|
9
10
|
attribute :cookbook, Batali::Unit, :multiple => true, :coerce => lambda{|v| Batali::Unit.new(v)}, :default => []
|
10
11
|
|
11
12
|
# Build manifest from given path. If no file exists, empty
|
@@ -15,9 +16,9 @@ module Batali
|
|
15
16
|
# @return [Manifest]
|
16
17
|
def self.build(path)
|
17
18
|
if(File.exists?(path))
|
18
|
-
self.new(Bogo::Config.new(path).data)
|
19
|
+
self.new(Bogo::Config.new(path).data.merge(:path => path))
|
19
20
|
else
|
20
|
-
self.new
|
21
|
+
self.new(:path => path)
|
21
22
|
end
|
22
23
|
end
|
23
24
|
|
data/lib/batali/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: batali
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.16
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Roberts
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: attribute_struct
|