batali 0.2.0 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 848af492e8e0f263b8d8577dd3830ce985a2de5f
4
- data.tar.gz: f3484364c7e5e2f9f83f1f93dd99b70a0490dfd3
3
+ metadata.gz: b932231673eb1265232f82a6a4e5e201e0324058
4
+ data.tar.gz: 64b947c6f2c44899a0e220800981a2eec1ff6954
5
5
  SHA512:
6
- metadata.gz: 22ee3396473217e237facd53e3e0e07357fd6afc5595bb814c944484015aea4ec6724b28cf23b92832628fc3c8d77459f5fffaf365c504b065ab14359149bb1f
7
- data.tar.gz: 4d3eae0ae14d20cca5cdbbc1574401146c236a8e04d4b5862e5ff72248d71119d08b062ead31c64dfbb722d245b034179c2f2281c749c727d209ed58777c496b
6
+ metadata.gz: 815ced6e99320cc992db4a985dddebe8f426ee2dafce37ca6d542105b52e41e000d1ba19993c0005b88c1d606b422a33e6b93452599a1f248bc284efbc59a201
7
+ data.tar.gz: 7b40082eb73d94ff5216d83fd5089ec9fd29c376e966b37d6de770049f10b163ce813c0b07efc76bd56d435f49ef06f2eda25deed772dfeb8fe0e23c40d84ca4
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ # v0.2.2
2
+ * Add guard when switching resolution types (#14)
3
+ * Cache HTTP requests (#20)
4
+ * Prune cookbook results for infrastructure resolution (#21)
5
+ * Provide least impact behavior when resolving infrastructure (#19)
6
+
1
7
  # v0.2.0
2
8
  * Add proxy support (#18)
3
9
  * Transition to "beta" state
data/batali.gemspec CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
11
11
  s.require_path = 'lib'
12
12
  s.license = 'Apache 2.0'
13
13
  s.add_runtime_dependency 'attribute_struct', '~> 0.2.14'
14
- s.add_runtime_dependency 'grimoire', '~> 0.2.0'
14
+ s.add_runtime_dependency 'grimoire', '~> 0.2.1'
15
15
  s.add_runtime_dependency 'bogo', '~> 0.1.18'
16
16
  s.add_runtime_dependency 'bogo-cli', '~> 0.1.12'
17
17
  s.add_runtime_dependency 'bogo-config', '~> 0.1.10'
@@ -61,6 +61,9 @@ module Batali
61
61
  end
62
62
  ]
63
63
  ui.info 'Performing single path resolution.'
64
+ if(manifest.infrastructure)
65
+ ui.ask 'Current manifest is resolved for infrastucture. Convert to single path?'
66
+ end
64
67
  results = []
65
68
  run_action 'Resolving dependency constraints' do
66
69
  results = solv.generate!
@@ -72,7 +75,10 @@ module Batali
72
75
  ideal_solution = results.pop
73
76
  dry_run('manifest file write') do
74
77
  run_action 'Writing manifest' do
75
- manifest = Manifest.new(:cookbook => ideal_solution.units)
78
+ manifest = Manifest.new(
79
+ :cookbook => ideal_solution.units,
80
+ :infrastructure => false
81
+ )
76
82
  File.open('batali.manifest', 'w') do |file|
77
83
  file.write MultiJson.dump(manifest, :pretty => true)
78
84
  end
@@ -106,13 +112,20 @@ module Batali
106
112
  # @return [TrueClass]
107
113
  def infrastructure_resolution(solv)
108
114
  ui.info 'Performing infrastructure path resolution.'
115
+ if(manifest.infrastructure == false)
116
+ ui.ask 'Current manifest is resolved single path. Convert to infrastructure?'
117
+ end
109
118
  run_action 'Writing infrastructure manifest file' do
110
119
  File.open(manifest.path, 'w') do |file|
111
- manifest = Manifest.new(:cookbook => solv.world.units.values.flatten)
120
+ manifest = Manifest.new(
121
+ :cookbook => solv.world.units.values.flatten,
122
+ :infrastructure => true
123
+ )
112
124
  file.write MultiJson.dump(manifest, :pretty => true)
113
125
  nil
114
126
  end
115
127
  end
128
+ solv.prune_world!
116
129
  ui.info 'Infrastructure manifest solution:'
117
130
  solv.world.units.sort_by(&:first).each do |name, units|
118
131
  ui.puts "#{name} <#{units.map(&:version).sort.map(&:to_s).join(', ')}>"
data/lib/batali/git.rb CHANGED
@@ -47,7 +47,7 @@ module Batali
47
47
  klass.class_eval do
48
48
  attribute :url, String, :required => true
49
49
  attribute :ref, String, :required => true
50
- attribute :cache, String
50
+ attribute :cache, String, :default => File.expand_path('~/.batali/cache/remote_site')
51
51
  end
52
52
  end
53
53
 
@@ -7,6 +7,7 @@ module Batali
7
7
  include Bogo::Memoization
8
8
 
9
9
  attribute :path, String
10
+ attribute :infrastructure, [TrueClass, FalseClass]
10
11
  attribute :cookbook, Batali::Unit, :multiple => true, :coerce => lambda{|v| Batali::Unit.new(v)}, :default => []
11
12
 
12
13
  # Build manifest from given path. If no file exists, empty
@@ -33,9 +33,10 @@ module Batali
33
33
  # @return [String] cache directory path
34
34
  def cache_directory
35
35
  memoize(:cache_directory) do
36
- path = File.join(cache, identifier)
37
- FileUtils.mkdir_p(path)
38
- path
36
+ ['entitystore', 'metastore', identifier].each do |leaf|
37
+ FileUtils.mkdir_p(File.join(cache, leaf))
38
+ end
39
+ File.join(cache, leaf)
39
40
  end
40
41
  end
41
42
 
@@ -83,7 +84,10 @@ module Batali
83
84
  if(do_fetch)
84
85
  t_uni = "#{universe_path}.#{SecureRandom.urlsafe_base64}"
85
86
  File.open(t_uni, 'w') do |file|
86
- file.write HTTP.get(URI.join(endpoint, 'universe')).body.to_s
87
+ file.write HTTP.with_cache(
88
+ :metastore => File.join(cache, 'metastore'),
89
+ :entitystore => File.join(cache, 'entitystore')
90
+ ).get(URI.join(endpoint, 'universe')).body.to_s
87
91
  end
88
92
  FileUtils.mv(t_uni, universe_path)
89
93
  end
@@ -18,7 +18,8 @@ module Batali
18
18
  # @param unit [Unit] unit to score
19
19
  # @param idx [Integer] current index location
20
20
  # @return [Numeric, NilClass]
21
- def score_for(unit, idx=0)
21
+ def score_for(unit, *args)
22
+ opts = args.detect{|a| a.is_a?(Hash)} || {}
22
23
  multiplier = 1
23
24
  manifest_unit = manifest.cookbook.detect do |m_unit|
24
25
  m_unit.name == unit.name
@@ -28,6 +29,12 @@ module Batali
28
29
  # should be _the_ preferred version
29
30
  if(manifest_unit.version == unit.version)
30
31
  multiplier = 10000000
32
+ elsif(opts[:solver].new_world)
33
+ new_world_unit = opts[:solver].new_world.units.detect do |n_unit|
34
+ n_unit.name == unit.name &&
35
+ n_unit.version == unit.version
36
+ end
37
+ multiplier = 10000000 if new_world_unit
31
38
  else
32
39
  # If the unit version satisfies within the patch segment of
33
40
  # the manifest version score those versions highest for upgrade
@@ -49,6 +56,14 @@ module Batali
49
56
  multiplier = multi_val + (multi_val * distance)
50
57
  end
51
58
  end
59
+ else
60
+ if(opts[:solver].new_world)
61
+ new_world_unit = opts[:solver].new_world.units.detect do |n_unit|
62
+ n_unit.name == unit.name &&
63
+ n_unit.version == unit.version
64
+ end
65
+ multiplier = 10000000 if new_world_unit
66
+ end
52
67
  end
53
68
  score = []
54
69
  # Generate a "value" for each segment of the version with
@@ -38,14 +38,33 @@ module Batali
38
38
  deps.to_a
39
39
  end
40
40
 
41
+ # @return [String] path to cache
42
+ def cache_directory
43
+ memoize(:cache_directory) do
44
+ unless(@cache)
45
+ @cache = File.expand_path('~/.batali/cache/remote_site')
46
+ end
47
+ ['entitystore', 'metastore'].each do |leaf|
48
+ FileUtils.mkdir_p(File.join(cache, leaf))
49
+ end
50
+ cache
51
+ end
52
+ end
53
+
41
54
  # @return [String] directory
42
55
  def asset
43
- path = File.join(cache, Base64.urlsafe_encode64(url))
56
+ path = File.join(cache_directory, Base64.urlsafe_encode64(url))
44
57
  unless(File.directory?(path))
45
58
  FileUtils.mkdir_p(path)
46
- result = HTTP.get(url)
59
+ result = HTTP.with_cache(
60
+ :metastore => File.join(cache_directory, 'metastore'),
61
+ :entitystore => File.join(cache_directory, 'entitystore')
62
+ ).get(url)
47
63
  while(result.code == 302)
48
- result = HTTP.get(result.headers['Location'])
64
+ result = HTTP.with_cache(
65
+ :metastore => File.join(cache_directory, 'metastore'),
66
+ :entitystore => File.join(cache_directory, 'entitystore')
67
+ ).get(result.headers['Location'])
49
68
  end
50
69
  File.open(a_path = File.join(path, 'asset'), 'w') do |file|
51
70
  while(content = result.body.readpartial(2048))
@@ -1,4 +1,4 @@
1
1
  module Batali
2
2
  # Current version
3
- VERSION = Gem::Version.new('0.2.0')
3
+ VERSION = Gem::Version.new('0.2.2')
4
4
  end
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.2.0
4
+ version: 0.2.2
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-04-01 00:00:00.000000000 Z
11
+ date: 2015-04-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: attribute_struct
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.2.0
33
+ version: 0.2.1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.2.0
40
+ version: 0.2.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bogo
43
43
  requirement: !ruby/object:Gem::Requirement