vagrant-cookbook-fetcher 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/ChangeLog +4 -0
  2. data/lib/vagrant_cookbook_fetcher.rb +46 -25
  3. metadata +1 -1
data/ChangeLog CHANGED
@@ -1,3 +1,7 @@
1
+ 2013-04-09 0.0.9 Clinton Wolfe <clintoncwolfe at gmail dot com>
2
+ * Rewrite combined/ linker to be more flexible
3
+ * Create two spec directories in combined/ - one symlinked from the perspective of
4
+ the VM host, and one from the perspective of the VM guest
1
5
 
2
6
  2013-04-08 0.0.8 Clinton Wolfe <clintoncwolfe at gmail dot com>
3
7
  * Correct rspec directory name specs => spec
@@ -142,18 +142,25 @@ module CookbookFetcher
142
142
  # already been performed, creates the combined/ directory in the current directory,
143
143
  # and symlinks in the roles, nodes, etc.
144
144
  def update_links (checkouts,logger)
145
- things_to_link = ["roles", "nodes", "handlers", "data_bags", "spec"]
146
- logger.info "Updating links to #{things_to_link.join(', ')}"
145
+ things_to_link = {
146
+ "roles" => {:vagrant_pov_link => true, :target_dir => "roles", :step_in => false },
147
+ "nodes" => {:vagrant_pov_link => true, :target_dir => "nodes", :step_in => false },
148
+ "handlers" => {:vagrant_pov_link => true, :target_dir => "handlers", :step_in => false },
149
+ "data_bags" => {:vagrant_pov_link => true, :target_dir => "data_bags", :step_in => true },
150
+ "spec_ext" => {:vagrant_pov_link => false, :target_dir => "spec", :step_in => false },
151
+ "spec_int" => {:vagrant_pov_link => true, :target_dir => "spec", :step_in => false },
152
+ }
153
+ logger.info "Updating links to #{things_to_link.keys.sort.join(', ')}"
147
154
 
148
155
  if !Dir.exists?("combined") then Dir.mkdir("combined") end
149
156
  Dir.chdir("combined") do
150
157
 
151
158
  # Create/clear the subdirs
152
- things_to_link.each do |thing|
159
+ things_to_link.keys.each do |thing|
153
160
  if !Dir.exists?(thing) then Dir.mkdir(thing) end
154
- if (thing == "data_bags") then
155
- Dir.foreach(thing) do |dbag_dir|
156
- Dir.foreach(thing + '/' + dbag_dir) do |file|
161
+ if (things_to_link[thing][:step_in]) then
162
+ Dir.foreach(thing) do |top_dir|
163
+ Dir.foreach(thing + '/' + top_dir) do |file|
157
164
  if FileTest.symlink?(file) then File.delete(file) end
158
165
  end
159
166
  end
@@ -168,29 +175,43 @@ module CookbookFetcher
168
175
  # Being careful to go in cookbook order, symlink the files
169
176
  checkouts[:cookbook_list].each do |cookbook_dir|
170
177
  checkout_dir = (cookbook_dir.split('/'))[1]
171
- things_to_link.each do |thing|
172
- co_thing_dir = "checkouts/#{checkout_dir}/#{thing}"
178
+ things_to_link.each do |thing, opts|
179
+ checkout_thing_dir = "checkouts/#{checkout_dir}/#{opts[:target_dir]}"
173
180
  combined_dir = "combined/#{thing}"
174
- if Dir.exists?(co_thing_dir) then
175
- if (thing == "data_bags") then
176
- Dir.foreach(co_thing_dir) do |co_dbag_dir|
177
- next unless File.directory?(co_thing_dir + '/' + co_dbag_dir)
178
- next if co_dbag_dir.start_with?('.')
179
- combined_dbag_dir = combined_dir + '/' + co_dbag_dir
180
- if !Dir.exists?(combined_dbag_dir) then Dir.mkdir(combined_dbag_dir) end
181
- Dir.entries(co_thing_dir + '/' + co_dbag_dir).grep(/\.(rb|json)$/).each do |file|
182
- # Under vagrant, we see this directory as /vagrant/checkouts/<checkout>/data_bags/<dbag>/<dbag_entry.json>
183
- # Use -f so later checkouts can override earlier ones
184
- cmd = "ln -sf /vagrant/#{co_thing_dir + '/' + co_dbag_dir}/#{file} combined/#{thing}/#{co_dbag_dir}/#{file}"
185
- unless system cmd then raise "Could not '#{cmd}'" end
181
+ if Dir.exists?(checkout_thing_dir) then
182
+ if opts[:step_in] then
183
+ Dir.foreach(checkout_thing_dir) do |checkout_top_dir|
184
+ next unless File.directory?(checkout_thing_dir + '/' + checkout_top_dir)
185
+ next if checkout_top_dir.start_with?('.')
186
+ combined_top_dir = combined_dir + '/' + checkout_top_dir
187
+ if !Dir.exists?(combined_top_dir) then Dir.mkdir(combined_top_dir) end
188
+ Dir.entries(checkout_thing_dir + '/' + checkout_top_dir).grep(/\.(rb|json)$/).each do |file|
189
+ if opts[:vagrant_pov_link] then
190
+ # Under vagrant, we see this directory as /vagrant/checkouts/<checkout>/data_bags/<dbag>/<dbag_entry.json>
191
+ # Use -f so later checkouts can override earlier ones
192
+ cmd = "ln -sf /vagrant/#{checkout_thing_dir + '/' + checkout_top_dir}/#{file} combined/#{thing}/#{checkout_top_dir}/#{file}"
193
+ unless system cmd then raise "Could not '#{cmd}'" end
194
+ else
195
+ # Link as visible to the host machine
196
+ # Use -f so later checkouts can override earlier ones
197
+ cmd = "ln -sf ../../#{checkout_thing_dir + '/' + checkout_top_dir}/#{file} combined/#{thing}/#{checkout_top_dir}/#{file}"
198
+ unless system cmd then raise "Could not '#{cmd}'" end
199
+ end
186
200
  end
187
201
  end
188
202
  else
189
- Dir.entries(co_thing_dir).grep(/\.(rb|json)$/).each do |file|
190
- # Under vagrant, we see this directory as /vagrant/checkouts/foo/role/bar.rb
191
- # Use -f so later checkouts can override earlier ones
192
- cmd = "ln -sf /vagrant/#{co_thing_dir}/#{file} combined/#{thing}/#{file}"
193
- unless system cmd then raise "Could not '#{cmd}'" end
203
+ Dir.entries(checkout_thing_dir).grep(/\.(rb|json)$/).each do |file|
204
+ if opts[:vagrant_pov_link] then
205
+ # Under vagrant, we see this directory as /vagrant/checkouts/foo/role/bar.rb
206
+ # Use -f so later checkouts can override earlier ones
207
+ cmd = "ln -sf /vagrant/#{checkout_thing_dir}/#{file} combined/#{thing}/#{file}"
208
+ unless system cmd then raise "Could not '#{cmd}'" end
209
+ else
210
+ # Link as visible to the host machine
211
+ # Use -f so later checkouts can override earlier ones
212
+ cmd = "ln -sf ../../#{checkout_thing_dir}/#{file} combined/#{thing}/#{file}"
213
+ unless system cmd then raise "Could not '#{cmd}'" end
214
+ end
194
215
  end
195
216
  end
196
217
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-cookbook-fetcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: