knife-essentials 1.3.2 → 1.4
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.
- data/lib/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +83 -0
- data/lib/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +69 -0
- data/lib/chef_fs/file_system/chef_repository_file_system_cookbooks_dir.rb +16 -12
- data/lib/chef_fs/file_system/chef_repository_file_system_data_bags_dir.rb +2 -3
- data/lib/chef_fs/file_system/chef_repository_file_system_entry.rb +5 -66
- data/lib/chef_fs/file_system/chef_repository_file_system_root_dir.rb +0 -8
- data/lib/chef_fs/file_system/cookbooks_dir.rb +2 -1
- data/lib/chef_fs/version.rb +1 -1
- data/spec/integration/chef_repo_path_spec.rb +27 -19
- data/spec/integration/chef_repository_file_system_spec.rb +3 -9
- data/spec/integration/chefignore_spec.rb +0 -4
- metadata +4 -2
@@ -0,0 +1,83 @@
|
|
1
|
+
#
|
2
|
+
# Author:: John Keiser (<jkeiser@opscode.com>)
|
3
|
+
# Copyright:: Copyright (c) 2013 Opscode, Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
require 'chef_fs/file_system/chef_repository_file_system_cookbook_entry'
|
20
|
+
require 'chef_fs/file_system/cookbook_dir'
|
21
|
+
require 'chef/cookbook/chefignore'
|
22
|
+
require 'chef/cookbook/cookbook_version_loader'
|
23
|
+
|
24
|
+
module ChefFS
|
25
|
+
module FileSystem
|
26
|
+
class ChefRepositoryFileSystemCookbookDir < ChefRepositoryFileSystemCookbookEntry
|
27
|
+
def initialize(name, parent, file_path = nil)
|
28
|
+
super(name, parent, file_path)
|
29
|
+
end
|
30
|
+
|
31
|
+
def chef_object
|
32
|
+
begin
|
33
|
+
loader = Chef::Cookbook::CookbookVersionLoader.new(file_path, parent.chefignore)
|
34
|
+
# We need the canonical cookbook name if we are using versioned cookbooks, but we don't
|
35
|
+
# want to spend a lot of time adding code to the main Chef libraries
|
36
|
+
if Chef::Config[:versioned_cookbooks]
|
37
|
+
_canonical_name = canonical_cookbook_name(File.basename(file_path))
|
38
|
+
fail "When versioned_cookbooks mode is on, cookbook #{file_path} must match format <cookbook_name>-x.y.z" unless _canonical_name
|
39
|
+
|
40
|
+
# KLUDGE: We shouldn't have to use instance_variable_set
|
41
|
+
loader.instance_variable_set(:@cookbook_name, _canonical_name)
|
42
|
+
end
|
43
|
+
|
44
|
+
loader.load_cookbooks
|
45
|
+
return loader.cookbook_version
|
46
|
+
rescue
|
47
|
+
Chef::Log.error("Could not read #{path_for_printing} into a Chef object: #{$!}")
|
48
|
+
end
|
49
|
+
nil
|
50
|
+
end
|
51
|
+
|
52
|
+
def children
|
53
|
+
Dir.entries(file_path).sort.
|
54
|
+
select { |child_name| can_have_child?(child_name, File.directory?(File.join(file_path, child_name))) }.
|
55
|
+
map do |child_name|
|
56
|
+
segment_info = CookbookDir::COOKBOOK_SEGMENT_INFO[child_name.to_sym] || {}
|
57
|
+
ChefRepositoryFileSystemCookbookEntry.new(child_name, self, nil, segment_info[:ruby_only], segment_info[:recursive])
|
58
|
+
end.
|
59
|
+
select { |entry| !(entry.dir? && entry.children.size == 0) }
|
60
|
+
end
|
61
|
+
|
62
|
+
def can_have_child?(name, is_dir)
|
63
|
+
if is_dir
|
64
|
+
# Only the given directories will be uploaded.
|
65
|
+
return CookbookDir::COOKBOOK_SEGMENT_INFO.keys.include?(name.to_sym) && name != 'root_files'
|
66
|
+
end
|
67
|
+
|
68
|
+
super(name, is_dir)
|
69
|
+
end
|
70
|
+
|
71
|
+
# Exposed as a class method so that it can be used elsewhere
|
72
|
+
def self.canonical_cookbook_name(entry_name)
|
73
|
+
name_match = ChefFS::FileSystem::CookbookDir::VALID_VERSIONED_COOKBOOK_NAME.match(entry_name)
|
74
|
+
return nil if name_match.nil?
|
75
|
+
return name_match[1]
|
76
|
+
end
|
77
|
+
|
78
|
+
def canonical_cookbook_name(entry_name)
|
79
|
+
self.class.canonical_cookbook_name(entry_name)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
#
|
2
|
+
# Author:: John Keiser (<jkeiser@opscode.com>)
|
3
|
+
# Copyright:: Copyright (c) 2013 Opscode, Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
require 'chef_fs/file_system/chef_repository_file_system_entry'
|
20
|
+
require 'chef_fs/file_system/chef_repository_file_system_cookbooks_dir'
|
21
|
+
|
22
|
+
module ChefFS
|
23
|
+
module FileSystem
|
24
|
+
class ChefRepositoryFileSystemCookbookEntry < ChefRepositoryFileSystemEntry
|
25
|
+
def initialize(name, parent, file_path = nil, ruby_only = false, recursive = false)
|
26
|
+
super(name, parent, file_path)
|
27
|
+
@ruby_only = ruby_only
|
28
|
+
@recursive = recursive
|
29
|
+
end
|
30
|
+
|
31
|
+
attr_reader :ruby_only
|
32
|
+
attr_reader :recursive
|
33
|
+
|
34
|
+
def children
|
35
|
+
Dir.entries(file_path).sort.
|
36
|
+
select { |child_name| can_have_child?(child_name, File.directory?(File.join(file_path, child_name))) }.
|
37
|
+
map { |child_name| ChefRepositoryFileSystemCookbookEntry.new(child_name, self, nil, ruby_only, recursive) }.
|
38
|
+
select { |entry| !(entry.dir? && entry.children.size == 0) }
|
39
|
+
end
|
40
|
+
|
41
|
+
def can_have_child?(name, is_dir)
|
42
|
+
if is_dir
|
43
|
+
return recursive && name != '.' && name != '..'
|
44
|
+
elsif ruby_only
|
45
|
+
return false if name[-3..-1] != '.rb'
|
46
|
+
end
|
47
|
+
|
48
|
+
# Check chefignore
|
49
|
+
ignorer = parent
|
50
|
+
begin
|
51
|
+
if ignorer.is_a?(ChefRepositoryFileSystemCookbooksDir)
|
52
|
+
# Grab the path from entry to child
|
53
|
+
path_to_child = name
|
54
|
+
child = self
|
55
|
+
while child.parent != ignorer
|
56
|
+
path_to_child = PathUtils.join(child.name, path_to_child)
|
57
|
+
child = child.parent
|
58
|
+
end
|
59
|
+
# Check whether that relative path is ignored
|
60
|
+
return !ignorer.chefignore || !ignorer.chefignore.ignored?(path_to_child)
|
61
|
+
end
|
62
|
+
ignorer = ignorer.parent
|
63
|
+
end while ignorer
|
64
|
+
|
65
|
+
true
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -17,6 +17,7 @@
|
|
17
17
|
#
|
18
18
|
|
19
19
|
require 'chef_fs/file_system/chef_repository_file_system_entry'
|
20
|
+
require 'chef_fs/file_system/chef_repository_file_system_cookbook_dir'
|
20
21
|
require 'chef/cookbook/chefignore'
|
21
22
|
|
22
23
|
module ChefFS
|
@@ -34,20 +35,23 @@ module ChefFS
|
|
34
35
|
|
35
36
|
attr_reader :chefignore
|
36
37
|
|
37
|
-
def
|
38
|
-
|
38
|
+
def children
|
39
|
+
Dir.entries(file_path).sort.
|
40
|
+
select { |child_name| can_have_child?(child_name, File.directory?(File.join(file_path, child_name))) }.
|
41
|
+
map { |child_name| ChefRepositoryFileSystemCookbookDir.new(child_name, self) }.
|
42
|
+
select do |entry|
|
43
|
+
# empty cookbooks and cookbook directories are ignored
|
44
|
+
if entry.children.size == 0
|
45
|
+
Chef::Log.warn("Cookbook '#{entry.name}' is empty or entirely chefignored at #{entry.path_for_printing}")
|
46
|
+
false
|
47
|
+
else
|
48
|
+
true
|
49
|
+
end
|
50
|
+
end
|
39
51
|
end
|
40
52
|
|
41
|
-
def
|
42
|
-
|
43
|
-
return true if entry.name.start_with?('.')
|
44
|
-
|
45
|
-
result = super(entry)
|
46
|
-
|
47
|
-
if result
|
48
|
-
Chef::Log.warn("Cookbook '#{entry.name}' is empty or entirely chefignored at #{entry.path_for_printing}")
|
49
|
-
end
|
50
|
-
result
|
53
|
+
def can_have_child?(name, is_dir)
|
54
|
+
is_dir && !name.start_with?('.')
|
51
55
|
end
|
52
56
|
end
|
53
57
|
end
|
@@ -26,9 +26,8 @@ module ChefFS
|
|
26
26
|
super(name, parent, path, ChefFS::DataHandler::DataBagItemDataHandler.new)
|
27
27
|
end
|
28
28
|
|
29
|
-
def
|
30
|
-
|
31
|
-
super(entry)
|
29
|
+
def can_have_child?(name, is_dir)
|
30
|
+
is_dir && !name.start_with?('.')
|
32
31
|
end
|
33
32
|
end
|
34
33
|
end
|
@@ -18,7 +18,6 @@
|
|
18
18
|
#
|
19
19
|
|
20
20
|
require 'chef_fs/file_system/file_system_entry'
|
21
|
-
require 'chef/cookbook/cookbook_version_loader'
|
22
21
|
|
23
22
|
module ChefFS
|
24
23
|
module FileSystem
|
@@ -30,38 +29,12 @@ module ChefFS
|
|
30
29
|
@data_handler = data_handler
|
31
30
|
end
|
32
31
|
|
33
|
-
def chefignore
|
34
|
-
nil
|
35
|
-
end
|
36
|
-
|
37
|
-
def ignore_empty_directories?
|
38
|
-
parent.ignore_empty_directories?
|
39
|
-
end
|
40
|
-
|
41
32
|
def data_handler
|
42
33
|
@data_handler || parent.data_handler
|
43
34
|
end
|
44
35
|
|
45
36
|
def chef_object
|
46
37
|
begin
|
47
|
-
if parent.path == '/cookbooks'
|
48
|
-
loader = Chef::Cookbook::CookbookVersionLoader.new(file_path, parent.chefignore)
|
49
|
-
# We need the canonical cookbook name if we are using versioned cookbooks, but we don't
|
50
|
-
# want to spend a lot of time adding code to the main Chef libraries
|
51
|
-
if Chef::Config[:versioned_cookbooks]
|
52
|
-
|
53
|
-
_canonical_name = canonical_cookbook_name(File.basename(file_path))
|
54
|
-
fail "When versioned_cookbooks mode is on, cookbook #{file_path} must match format <cookbook_name>-x.y.z" unless _canonical_name
|
55
|
-
|
56
|
-
# KLUDGE: We shouldn't have to use instance_variable_set
|
57
|
-
loader.instance_variable_set(:@cookbook_name, _canonical_name)
|
58
|
-
end
|
59
|
-
|
60
|
-
loader.load_cookbooks
|
61
|
-
return loader.cookbook_version
|
62
|
-
end
|
63
|
-
|
64
|
-
# Otherwise, inflate the file using the chosen JSON class (if any)
|
65
38
|
return data_handler.chef_object(JSON.parse(read, :create_additions => false))
|
66
39
|
rescue
|
67
40
|
Chef::Log.error("Could not read #{path_for_printing} into a Chef object: #{$!}")
|
@@ -69,49 +42,15 @@ module ChefFS
|
|
69
42
|
nil
|
70
43
|
end
|
71
44
|
|
72
|
-
|
73
|
-
|
74
|
-
name_match = ChefFS::FileSystem::CookbookDir::VALID_VERSIONED_COOKBOOK_NAME.match(entry_name)
|
75
|
-
return nil if name_match.nil?
|
76
|
-
return name_match[1]
|
77
|
-
end
|
78
|
-
|
79
|
-
def canonical_cookbook_name(entry_name)
|
80
|
-
self.class.canonical_cookbook_name(entry_name)
|
45
|
+
def can_have_child?(name, is_dir)
|
46
|
+
!is_dir && name[-5..-1] == '.json'
|
81
47
|
end
|
82
48
|
|
83
49
|
def children
|
50
|
+
# Except cookbooks and data bag dirs, all things must be json files
|
84
51
|
Dir.entries(file_path).sort.
|
85
|
-
select { |
|
86
|
-
map { |
|
87
|
-
select { |entry| !ignored?(entry) }
|
88
|
-
end
|
89
|
-
|
90
|
-
private
|
91
|
-
|
92
|
-
def ignored?(child_entry)
|
93
|
-
if child_entry.dir?
|
94
|
-
# empty cookbooks and cookbook directories are ignored
|
95
|
-
if ignore_empty_directories? && child_entry.children.size == 0
|
96
|
-
return true
|
97
|
-
end
|
98
|
-
else
|
99
|
-
ignorer = parent
|
100
|
-
begin
|
101
|
-
if ignorer.chefignore
|
102
|
-
# Grab the path from entry to child
|
103
|
-
path_to_child = child_entry.name
|
104
|
-
child = self
|
105
|
-
while child.parent != ignorer
|
106
|
-
path_to_child = PathUtils.join(child.name, path_to_child)
|
107
|
-
child = child.parent
|
108
|
-
end
|
109
|
-
# Check whether that relative path is ignored
|
110
|
-
return ignorer.chefignore.ignored?(path_to_child)
|
111
|
-
end
|
112
|
-
ignorer = ignorer.parent
|
113
|
-
end while ignorer
|
114
|
-
end
|
52
|
+
select { |child_name| can_have_child?(child_name, File.directory?(File.join(file_path, child_name))) }.
|
53
|
+
map { |child_name| ChefRepositoryFileSystemEntry.new(child_name, self) }
|
115
54
|
end
|
116
55
|
|
117
56
|
end
|
@@ -21,6 +21,7 @@ require 'chef_fs/file_system/cookbook_dir'
|
|
21
21
|
require 'chef_fs/raw_request'
|
22
22
|
require 'chef_fs/file_system/operation_failed_error'
|
23
23
|
require 'chef_fs/file_system/cookbook_frozen_error'
|
24
|
+
require 'chef_fs/file_system/chef_repository_file_system_cookbook_dir'
|
24
25
|
|
25
26
|
require 'tmpdir'
|
26
27
|
|
@@ -84,7 +85,7 @@ module ChefFS
|
|
84
85
|
# to make this work. So instead, we make a temporary cookbook
|
85
86
|
# symlinking back to real cookbook, and upload the proxy.
|
86
87
|
def upload_versioned_cookbook(other, options)
|
87
|
-
cookbook_name = ChefFS::FileSystem::
|
88
|
+
cookbook_name = ChefFS::FileSystem::ChefRepositoryFileSystemCookbookDir.canonical_cookbook_name(other.name)
|
88
89
|
|
89
90
|
Dir.mktmpdir do |temp_cookbooks_path|
|
90
91
|
proxy_cookbook_path = "#{temp_cookbooks_path}/#{cookbook_name}"
|
data/lib/chef_fs/version.rb
CHANGED
@@ -223,9 +223,11 @@ EOM
|
|
223
223
|
directory 'clients/blah.json'
|
224
224
|
file 'clients2/blah.json', {}
|
225
225
|
it 'knife show /clients/blah.json succeeds' do
|
226
|
-
|
227
|
-
|
228
|
-
|
226
|
+
knife('show --local /clients/blah.json').should_succeed <<EOM
|
227
|
+
/clients/blah.json:
|
228
|
+
{
|
229
|
+
}
|
230
|
+
EOM
|
229
231
|
end
|
230
232
|
end
|
231
233
|
|
@@ -278,16 +280,14 @@ EOM
|
|
278
280
|
file 'data_bags/blah', ''
|
279
281
|
file 'data_bags2/blah/item.json', ''
|
280
282
|
it 'knife list -Rfp data_bags shows files in blah' do
|
281
|
-
|
282
|
-
knife('list --local -Rfp /data_bags').should_succeed <<EOM
|
283
|
+
knife('list --local -Rfp /data_bags').should_succeed <<EOM
|
283
284
|
/data_bags/bag/
|
284
285
|
/data_bags/bag/item.json
|
285
286
|
/data_bags/bag2/
|
286
287
|
/data_bags/bag2/item2.json
|
287
288
|
/data_bags/blah/
|
288
|
-
/data_bags/blah/
|
289
|
+
/data_bags/blah/item.json
|
289
290
|
EOM
|
290
|
-
end
|
291
291
|
end
|
292
292
|
end
|
293
293
|
|
@@ -310,9 +310,11 @@ EOM
|
|
310
310
|
directory 'environments/blah.json'
|
311
311
|
file 'environments2/blah.json', {}
|
312
312
|
it 'knife show /environments/blah.json succeeds' do
|
313
|
-
|
314
|
-
|
315
|
-
|
313
|
+
knife('show --local /environments/blah.json').should_succeed <<EOM
|
314
|
+
/environments/blah.json:
|
315
|
+
{
|
316
|
+
}
|
317
|
+
EOM
|
316
318
|
end
|
317
319
|
end
|
318
320
|
|
@@ -320,9 +322,11 @@ EOM
|
|
320
322
|
directory 'nodes/blah.json'
|
321
323
|
file 'nodes2/blah.json', {}
|
322
324
|
it 'knife show /nodes/blah.json succeeds' do
|
323
|
-
|
324
|
-
|
325
|
-
|
325
|
+
knife('show --local /nodes/blah.json').should_succeed <<EOM
|
326
|
+
/nodes/blah.json:
|
327
|
+
{
|
328
|
+
}
|
329
|
+
EOM
|
326
330
|
end
|
327
331
|
end
|
328
332
|
|
@@ -330,9 +334,11 @@ EOM
|
|
330
334
|
directory 'roles/blah.json'
|
331
335
|
file 'roles2/blah.json', {}
|
332
336
|
it 'knife show /roles/blah.json succeeds' do
|
333
|
-
|
334
|
-
|
335
|
-
|
337
|
+
knife('show --local /roles/blah.json').should_succeed <<EOM
|
338
|
+
/roles/blah.json:
|
339
|
+
{
|
340
|
+
}
|
341
|
+
EOM
|
336
342
|
end
|
337
343
|
end
|
338
344
|
|
@@ -340,9 +346,11 @@ EOM
|
|
340
346
|
directory 'users/blah.json'
|
341
347
|
file 'users2/blah.json', {}
|
342
348
|
it 'knife show /users/blah.json succeeds' do
|
343
|
-
|
344
|
-
|
345
|
-
|
349
|
+
knife('show --local /users/blah.json').should_succeed <<EOM
|
350
|
+
/users/blah.json:
|
351
|
+
{
|
352
|
+
}
|
353
|
+
EOM
|
346
354
|
end
|
347
355
|
end
|
348
356
|
|
@@ -119,8 +119,7 @@ EOM
|
|
119
119
|
end
|
120
120
|
|
121
121
|
it "knife list --local -Rfp / should NOT return them" do
|
122
|
-
|
123
|
-
knife('list --local -Rfp /').should_succeed <<EOM
|
122
|
+
knife('list --local -Rfp /').should_succeed <<EOM
|
124
123
|
/data_bags/
|
125
124
|
/data_bags/bag1/
|
126
125
|
/data_bags/bag1/item1.json
|
@@ -129,7 +128,6 @@ EOM
|
|
129
128
|
/roles/
|
130
129
|
/roles/role1.json
|
131
130
|
EOM
|
132
|
-
end
|
133
131
|
end
|
134
132
|
end
|
135
133
|
|
@@ -188,8 +186,7 @@ EOM
|
|
188
186
|
end
|
189
187
|
|
190
188
|
it "knife list --local -Rfp / should NOT return them" do
|
191
|
-
|
192
|
-
knife('list --local -Rfp /').should_succeed <<EOM
|
189
|
+
knife('list --local -Rfp /').should_succeed <<EOM
|
193
190
|
/cookbooks/
|
194
191
|
/cookbooks/cookbook1/
|
195
192
|
/cookbooks/cookbook1/a.rb
|
@@ -222,7 +219,6 @@ EOM
|
|
222
219
|
/cookbooks/cookbook1/templates/c/d.rb
|
223
220
|
/cookbooks/cookbook1/templates/c/e.json
|
224
221
|
EOM
|
225
|
-
end
|
226
222
|
end
|
227
223
|
end
|
228
224
|
|
@@ -238,11 +234,9 @@ EOM
|
|
238
234
|
when_the_repository "has a file in data_bags/" do
|
239
235
|
file 'data_bags/file', ''
|
240
236
|
it 'does not show up in list -Rfp' do
|
241
|
-
|
242
|
-
knife('list --local -Rfp /').should_succeed <<EOM
|
237
|
+
knife('list --local -Rfp /').should_succeed <<EOM
|
243
238
|
/data_bags/
|
244
239
|
EOM
|
245
|
-
end
|
246
240
|
end
|
247
241
|
end
|
248
242
|
end
|
@@ -31,14 +31,10 @@ describe 'chefignore tests' do
|
|
31
31
|
/cookbooks/cookbook1/x.json
|
32
32
|
/data_bags/
|
33
33
|
/data_bags/bag1/
|
34
|
-
/data_bags/bag1/chefignore
|
35
34
|
/data_bags/bag1/x.json
|
36
|
-
/data_bags/chefignore
|
37
35
|
/environments/
|
38
|
-
/environments/chefignore
|
39
36
|
/environments/x.json
|
40
37
|
/roles/
|
41
|
-
/roles/chefignore
|
42
38
|
/roles/x.json
|
43
39
|
EOM
|
44
40
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knife-essentials
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: '1.4'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-06-
|
12
|
+
date: 2013-06-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: chef
|
@@ -150,6 +150,8 @@ files:
|
|
150
150
|
- lib/chef_fs/file_system/already_exists_error.rb
|
151
151
|
- lib/chef_fs/file_system/base_fs_dir.rb
|
152
152
|
- lib/chef_fs/file_system/base_fs_object.rb
|
153
|
+
- lib/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb
|
154
|
+
- lib/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb
|
153
155
|
- lib/chef_fs/file_system/chef_repository_file_system_cookbooks_dir.rb
|
154
156
|
- lib/chef_fs/file_system/chef_repository_file_system_data_bags_dir.rb
|
155
157
|
- lib/chef_fs/file_system/chef_repository_file_system_entry.rb
|