summaryrefslogtreecommitdiff
path: root/lib/chef
diff options
context:
space:
mode:
authorMal Graty <mal.graty@googlemail.com>2013-03-06 09:33:48 +0000
committerBryan McLellan <btm@opscode.com>2013-05-24 07:12:45 -0700
commit1c004dc6f1320cd0b2d2c785e197e599e22115dd (patch)
treebc44136d86e2c300053966422d0ff92d46720b14 /lib/chef
parent2de2f4a4cde5a58247caaf1d2b8a1a10c8d3a024 (diff)
downloadchef-1c004dc6f1320cd0b2d2c785e197e599e22115dd.tar.gz
Lazy load metadata
Diffstat (limited to 'lib/chef')
-rw-r--r--lib/chef/cookbook/cookbook_version_loader.rb27
-rw-r--r--lib/chef/cookbook_version.rb10
2 files changed, 20 insertions, 17 deletions
diff --git a/lib/chef/cookbook/cookbook_version_loader.rb b/lib/chef/cookbook/cookbook_version_loader.rb
index 77db236eca..44782bd7bf 100644
--- a/lib/chef/cookbook/cookbook_version_loader.rb
+++ b/lib/chef/cookbook/cookbook_version_loader.rb
@@ -19,16 +19,13 @@ class Chef
attr_reader :cookbook_pathname
- attr_reader :cookbook_name
attr_reader :cookbook_settings
attr_reader :metadata_filenames
def initialize(path, chefignore=nil)
@cookbook_path = File.expand_path( path )
@cookbook_pathname = File.basename( path )
- @cookbook_name = @cookbook_pathname
@chefignore = chefignore
- @metadata = Hash.new
@relative_path = /#{Regexp.escape(@cookbook_path)}\/(.+)$/
@cookbook_settings = {
:attribute_filenames => {},
@@ -66,14 +63,15 @@ class Chef
if empty?
Chef::Log.warn "found a directory #{cookbook_name} in the cookbook path, but it contains no cookbook files. skipping."
- else
- metadata = @metadata.is_a?(Metadata) ? @metadata : metadata(nil)
- @cookbook_name = metadata.name.to_sym unless metadata.name.nil?
end
@cookbook_settings
end
+ def cookbook_name
+ metadata.name || @cookbook_pathname
+ end
+
def cookbook_version
return nil if empty?
@@ -89,13 +87,16 @@ class Chef
c.provider_filenames = cookbook_settings[:provider_filenames].values
c.root_filenames = cookbook_settings[:root_filenames].values
c.metadata_filenames = @metadata_filenames
- c.metadata = metadata(c)
- c.name = c.metadata.name.to_sym
+ c.metadata = load_metadata(c)
end
end
+ def metadata
+ @metadata ||= load_metadata(nil)
+ end
+
# Generates the Cookbook::Metadata object
- def metadata(cookbook_version)
+ def load_metadata(cookbook_version)
@metadata = Chef::Cookbook::Metadata.new(cookbook_version)
@metadata_filenames.each do |metadata_file|
case metadata_file
@@ -158,18 +159,18 @@ class Chef
def apply_ruby_metadata(file)
begin
- @metadata.from_file(file)
+ metadata.from_file(file)
rescue JSON::ParserError
- Chef::Log.error("Error evaluating metadata.rb for #@cookbook_name in " + file)
+ Chef::Log.error("Error evaluating metadata.rb for #{cookbook_name} in " + file)
raise
end
end
def apply_json_metadata(file)
begin
- @metadata.from_json(IO.read(file))
+ metadata.from_json(IO.read(file))
rescue JSON::ParserError
- Chef::Log.error("Couldn't parse cookbook metadata JSON for #@cookbook_name in " + file)
+ Chef::Log.error("Couldn't parse cookbook metadata JSON for #{cookbook_name} in " + file)
raise
end
end
diff --git a/lib/chef/cookbook_version.rb b/lib/chef/cookbook_version.rb
index 13d62053f2..6e1a72ccb0 100644
--- a/lib/chef/cookbook_version.rb
+++ b/lib/chef/cookbook_version.rb
@@ -51,7 +51,6 @@ class Chef
attr_accessor :provider_filenames
attr_accessor :root_filenames
attr_accessor :pathname
- attr_accessor :name
attr_accessor :metadata
attr_accessor :metadata_filenames
attr_accessor :status
@@ -193,9 +192,8 @@ class Chef
#
# === Returns
# object<Chef::CookbookVersion>:: Duh. :)
- def initialize(name)
- @pathname = name
- @name = @pathname
+ def initialize(pathname)
+ @pathname = pathname
@frozen = false
@attribute_filenames = Array.new
@definition_filenames = Array.new
@@ -215,6 +213,10 @@ class Chef
@metadata = Chef::Cookbook::Metadata.new
end
+ def name
+ metadata.name || @pathname
+ end
+
def version
metadata.version
end