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 26
def initialize(ignore_file_or_repo)
  # Check the 'ignore_file_or_repo' path first and then look in the parent directories till root
  # to handle both the chef repo cookbook layout and a standalone cookbook
  @ignore_file = find_ignore_file(ignore_file_or_repo)
  @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 43
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 35
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

Lookup of chefignore file till the root dir of the provided path. If file refer then lookup the parent dir till the root. eg. path: /var/.chef/cookbook_name Lookup at ‘/var/.chef/cookbook_name/chefignore’, ‘/var/.chef/chefignore’ ‘/var/chefignore’ and ‘/chefignore’ until exist

# File lib/chef/cookbook/chefignore.rb, line 68
def find_ignore_file(path)
  Pathname.new(path).ascend do |dir|
    next unless dir.directory?

    file = dir.join("chefignore")
    return file.expand_path.to_s if file.exist?
  end

  nil
end
parse_ignore_file() click to toggle source
# File lib/chef/cookbook/chefignore.rb, line 49
def parse_ignore_file
  ignore_globs = []
  if @ignore_file && readable_file_or_symlink?(@ignore_file)
    File.foreach(@ignore_file) do |line|
      unless COMMENTS_AND_WHITESPACE.match?(line)
        line.strip!
        ignore_globs << line
      end
    end
  else
    Chef::Log.debug("No chefignore file found. No files will be ignored!")
  end
  ignore_globs
end