# # 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' 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 <