def self.sync_cookbook_file_cache(cookbook)
Chef::Log.debug("Synchronizing cookbook #{cookbook.name}")
eager_segments = COOKBOOK_SEGMENTS.dup
eager_segments.delete(:files)
eager_segments.delete(:templates)
eager_segments.each do |segment|
segment_filenames = Array.new
cookbook.manifest[segment].each do |manifest_record|
cache_filename = File.join("cookbooks", cookbook.name, manifest_record['path'])
valid_cache_entries[cache_filename] = true
current_checksum = nil
if cache.has_key?(cache_filename)
current_checksum = checksum_cookbook_file(cache.load(cache_filename, false))
end
if current_checksum != manifest_record['checksum']
raw_file = chef_server_rest.get_rest(manifest_record[:url], true)
Chef::Log.info("Storing updated #{cache_filename} in the cache.")
cache.move_to(raw_file.path, cache_filename)
else
Chef::Log.debug("Not storing #{cache_filename}, as the cache is up to date.")
end
full_path_cache_filename = cache.load(cache_filename, false)
segment_filenames << full_path_cache_filename
end
if segment.to_sym == :recipes
cookbook.recipe_filenames = segment_filenames
elsif segment.to_sym == :attributes
cookbook.attribute_filenames = segment_filenames
else
cookbook.segment_filenames(segment).replace(segment_filenames)
end
end
end