# # Author:: John Keiser () # Copyright:: Copyright (c) 2013 Opscode, Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. require "support/shared/integration/integration_helper" require "chef/knife/list" require "chef/knife/show" describe "chefignore tests", :workstation do include IntegrationSupport include KnifeSupport when_the_repository "has lots of stuff in it" do before do file "roles/x.json", {} file "environments/x.json", {} file "data_bags/bag1/x.json", {} file "cookbooks/cookbook1/x.json", {} end context "and has a chefignore everywhere except cookbooks" do before do chefignore = "x.json\nroles/x.json\nenvironments/x.json\ndata_bags/bag1/x.json\nbag1/x.json\ncookbooks/cookbook1/x.json\ncookbook1/x.json\n" file "chefignore", chefignore file "roles/chefignore", chefignore file "environments/chefignore", chefignore file "data_bags/chefignore", chefignore file "data_bags/bag1/chefignore", chefignore file "cookbooks/cookbook1/chefignore", chefignore end it "matching files and directories get ignored" do # NOTE: many of the "chefignore" files should probably not show up # themselves, but we have other tests that talk about that knife("list --local -Rfp /").should_succeed < "WARN: Cookbook 'cookbook1' is empty or entirely chefignored at #{Chef::Config.chef_repo_path}/cookbooks/cookbook1\n") /cookbooks/ EOM end end when_the_repository "has multiple cookbooks" do before do file "cookbooks/cookbook1/x.json", {} file "cookbooks/cookbook1/y.json", {} file "cookbooks/cookbook2/x.json", {} file "cookbooks/cookbook2/y.json", {} end context "and has a chefignore with filenames" do before { file "cookbooks/chefignore", "x.json\n" } it "matching files and directories get ignored in all cookbooks" do knife("list --local -Rfp /").should_succeed < "WARN: Child with name 'yourcookbook' found in multiple directories: #{Chef::Config.chef_repo_path}/cookbooks1/yourcookbook and #{Chef::Config.chef_repo_path}/cookbooks2/yourcookbook\n") /cookbooks/ /cookbooks/mycookbook/ /cookbooks/mycookbook/x.json /cookbooks/yourcookbook/ /cookbooks/yourcookbook/onlyincookbooks1.rb /cookbooks/yourcookbook/x.json EOM end end end end when_the_repository "has a cookbook named chefignore" do before do file "cookbooks/chefignore/metadata.rb", {} end it "knife list -Rfp /cookbooks shows it" do knife("list --local -Rfp /cookbooks").should_succeed <