summaryrefslogtreecommitdiff
path: root/lib/chef_zero/endpoints/cookbook_version_endpoint.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/chef_zero/endpoints/cookbook_version_endpoint.rb')
-rw-r--r--lib/chef_zero/endpoints/cookbook_version_endpoint.rb23
1 files changed, 16 insertions, 7 deletions
diff --git a/lib/chef_zero/endpoints/cookbook_version_endpoint.rb b/lib/chef_zero/endpoints/cookbook_version_endpoint.rb
index e78d44c..5502ba0 100644
--- a/lib/chef_zero/endpoints/cookbook_version_endpoint.rb
+++ b/lib/chef_zero/endpoints/cookbook_version_endpoint.rb
@@ -58,8 +58,8 @@ module ChefZero
deleted_cookbook = get_data(request)
response = super(request)
- cookbook_name = request.rest_path[3]
- cookbook_path = request.rest_path[0..1] + ['cookbooks', cookbook_name]
+ # Last one out turns out the lights: delete /organizations/ORG/cookbooks/NAME if it no longer has versions
+ cookbook_path = request.rest_path[0..3]
if exists_data_dir?(request, cookbook_path) && list_data(request, cookbook_path).size == 0
delete_data_dir(request, cookbook_path)
end
@@ -85,11 +85,20 @@ module ChefZero
private
- def hoover_unused_checksums(deleted_checksums, request, data_type='cookbooks')
- data_store.list(request.rest_path[0..1] + [data_type]).each do |cookbook_name|
- data_store.list(request.rest_path[0..1] + [data_type, cookbook_name]).each do |version|
- cookbook = data_store.get(request.rest_path[0..1] + [data_type, cookbook_name, version], request)
- deleted_checksums = deleted_checksums - get_checksums(cookbook)
+ def hoover_unused_checksums(deleted_checksums, request)
+ %w(cookbooks cookbook_artifacts).each do |cookbook_type|
+ begin
+ cookbooks = data_store.list(request.rest_path[0..1] + [cookbook_type])
+ rescue ChefZero::DataStore::DataNotFoundError
+ # Not all chef versions support cookbook_artifacts
+ raise unless cookbook_type == "cookbook_artifacts"
+ cookbooks = []
+ end
+ cookbooks.each do |cookbook_name|
+ data_store.list(request.rest_path[0..1] + [cookbook_type, cookbook_name]).each do |version|
+ cookbook = data_store.get(request.rest_path[0..1] + [cookbook_type, cookbook_name, version], request)
+ deleted_checksums = deleted_checksums - get_checksums(cookbook)
+ end
end
end
deleted_checksums.each do |checksum|