class Chef::Cookbook::Chefignore

Constants

COMMENTS_AND_WHITESPACE

Attributes

ignores[R]

Public Class Methods

new(ignore_file_or_repo) click to toggle source
# File lib/chef/cookbook/chefignore.rb, line 27
def initialize(ignore_file_or_repo)
  # Check the 'ignore_file_or_repo' path first and then look in the parent directory
  # to handle both the chef repo cookbook layout and a standalone cookbook
  @ignore_file = find_ignore_file(ignore_file_or_repo)
  @ignore_file = find_ignore_file(File.dirname(ignore_file_or_repo)) unless readable_file_or_symlink?(@ignore_file)

  @ignores = parse_ignore_file
end

Public Instance Methods

ignored?(file_name) click to toggle source

@param [String] file_name the file name to check ignored status for @return [Boolean] is the file ignored or not

# File lib/chef/cookbook/chefignore.rb, line 46
def ignored?(file_name)
  @ignores.any? { |glob| File.fnmatch?(glob, file_name) }
end
remove_ignores_from(file_list) click to toggle source

@param [Array] file_list the list of cookbook files @return [Array] list of cookbook files with chefignore files removed

# File lib/chef/cookbook/chefignore.rb, line 38
def remove_ignores_from(file_list)
  Array(file_list).inject([]) do |unignored, file|
    ignored?(file) ? unignored : unignored << file
  end
end

Private Instance Methods

find_ignore_file(path) click to toggle source
# File lib/chef/cookbook/chefignore.rb, line 64
def find_ignore_file(path)
  if File.basename(path) =~ /chefignore/
    path
  else
    File.join(path, "chefignore")
  end
end
parse_ignore_file() click to toggle source
# File lib/chef/cookbook/chefignore.rb, line 52
def parse_ignore_file
  ignore_globs = []
  if readable_file_or_symlink?(@ignore_file)
    File.foreach(@ignore_file) do |line|
      ignore_globs << line.strip unless line =~ COMMENTS_AND_WHITESPACE
    end
  else
    Chef::Log.trace("No chefignore file found at #{@ignore_file} no files will be ignored")
  end
  ignore_globs
end