# class Chef::Knife::Delete

### Public Instance Methods

delete_result(*results) click to toggle source

    # File lib/chef/knife/delete.rb, line 76
    def delete_result(*results)
      deleted_any = false
      found_any = false
      error = false
      results.each do |result|
        begin
          result.delete(config[:recurse])
          deleted_any = true
          found_any = true
        rescue Chef::ChefFS::FileSystem::NotFoundError
          # This is not an error unless *all* of them were not found
        rescue Chef::ChefFS::FileSystem::MustDeleteRecursivelyError => e
          ui.error "#{format_path_with_root(e.entry)} must be deleted recursively!  Pass -r to knife delete."
          found_any = true
          error = true
        rescue Chef::ChefFS::FileSystem::OperationNotAllowedError => e
          ui.error "#{format_path_with_root(e.entry)} #{e.reason}."
          found_any = true
          error = true
        end
      end
      if deleted_any
        output("Deleted #{format_path(results[0])}")
      elsif !found_any
        ui.error "#{format_path(results[0])}: No such file or directory"
        error = true
      end
      error
    end

format_path_with_root(entry) click to toggle source

    # File lib/chef/knife/delete.rb, line 71
    def format_path_with_root(entry)
      root = entry.root == chef_fs ? " (remote)" : " (local)"
      "#{format_path(entry)}#{root}"
    end

run() click to toggle source

    # File lib/chef/knife/delete.rb, line 31
    def run
      if name_args.length == 0
        show_usage
        ui.fatal("Must specify at least one argument.  If you want to delete everything in this directory, type \"knife delete --recurse .\"")
        exit 1
      end

      # Get the matches (recursively)
      error = false
      if config[:local]
        pattern_args.each do |pattern|
          Chef::ChefFS::FileSystem.list(local_fs, pattern).each do |result|
            if delete_result(result)
              error = true
            end
          end
        end
      elsif config[:both]
        pattern_args.each do |pattern|
          Chef::ChefFS::FileSystem.list_pairs(pattern, chef_fs, local_fs).each do |chef_result, local_result|
            if delete_result(chef_result, local_result)
              error = true
            end
          end
        end
      else # Remote only
        pattern_args.each do |pattern|
          Chef::ChefFS::FileSystem.list(chef_fs, pattern).each do |result|
            if delete_result(result)
              error = true
            end
          end
        end
      end

      if error
        exit 1
      end
    end