class Chef
  class Provider
    class RemoteDirectory
      def action_create
        super
        Chef::Log.debug("Doing a remote recursive directory transfer for #{@new_resource}")

        files_transferred = Set.new
        files_to_transfer.each do |cookbook_file_relative_path|
          create_cookbook_file(cookbook_file_relative_path)
          files_transferred << ::File.dirname(::File.join(@new_resource.path, cookbook_file_relative_path))
          files_transferred << ::File.join(@new_resource.path, cookbook_file_relative_path)
        end

        return unless @new_resource.purge

        files_to_purge = Set.new(
          Dir.glob(::File.join(@new_resource.path, "**", "*"), ::File::FNM_DOTMATCH).select do |name|
            name !~ /(?:^|#{Regexp.escape(::File::SEPARATOR)})\.\.?$/
          end
        )
        files_to_purge -= files_transferred
        purge_unmanaged_files(files_to_purge)
      end
    end
  end
end
