class Pod::Installer::SandboxDirCleaner

Cleans up the sandbox directory by removing stale target support files and headers.

Attributes

aggregate_targets[R]

@return [Array<AggregateTarget>]

The list of all aggregate targets that will be installed into the Sandbox.
pod_targets[R]

@return [Array<PodTarget>]

The list of all pod targets that will be installed into the Sandbox.
sandbox[R]

@return [Sandbox] The sandbox directory that will be cleaned.

Public Class Methods

new(sandbox, pod_targets, aggregate_targets) click to toggle source

Initialize a new instance

@param [Sandbox] sandbox @see sandbox @param [Array<PodTarget>] pod_targets @see pod_targets @param [Array<AggregateTarget>] aggregate_targets @see aggregate_targets

# File lib/cocoapods/installer/sandbox_dir_cleaner.rb, line 26
def initialize(sandbox, pod_targets, aggregate_targets)
  @sandbox = sandbox
  @pod_targets = pod_targets
  @aggregate_targets = aggregate_targets
end

Public Instance Methods

clean!() click to toggle source
# File lib/cocoapods/installer/sandbox_dir_cleaner.rb, line 32
def clean!
  UI.message('Cleaning up sandbox directory') do
    # Clean up Target Support Files Directory
    target_support_dirs_to_install = (pod_targets + aggregate_targets).map(&:support_files_dir)
    target_support_dirs = sandbox_target_support_dirs

    removed_target_support_dirs = target_support_dirs - target_support_dirs_to_install
    removed_target_support_dirs.each { |dir| remove_dir(dir) }

    # Clean up Sandbox Headers Directory
    sandbox_private_headers_to_install = pod_targets.flat_map do |pod_target|
      if pod_target.header_mappings_by_file_accessor.empty?
        []
      else
        [pod_target.build_headers.root.join(pod_target.headers_sandbox)]
      end
    end
    sandbox_public_headers_to_install = pod_targets.flat_map do |pod_target|
      if pod_target.public_header_mappings_by_file_accessor.empty?
        []
      else
        [
          sandbox.public_headers.root.join(pod_target.headers_sandbox),
          pod_target.module_map_path.dirname,
        ].uniq
      end
    end

    removed_sandbox_public_headers = sandbox_public_headers - sandbox_public_headers_to_install
    removed_sandbox_public_headers.each { |path| remove_dir(path) }

    removed_sandbox_private_headers = sandbox_private_headers(pod_targets) - sandbox_private_headers_to_install
    removed_sandbox_private_headers.each { |path| remove_dir(path) }

    project_dir_names_to_install = pod_targets.map do |pod_target|
      sandbox.pod_target_project_path(pod_target.project_name)
    end
    project_dir_names = sandbox_project_dir_names - [sandbox.project_path]
    user_project_dir_names = aggregate_targets.map(&:user_project_path).uniq

    removed_project_dir_names = project_dir_names - user_project_dir_names - project_dir_names_to_install
    removed_project_dir_names.each { |dir| remove_dir(dir) }
  end
end

Private Instance Methods

child_directories_of(dir) click to toggle source
# File lib/cocoapods/installer/sandbox_dir_cleaner.rb, line 95
def child_directories_of(dir)
  return [] unless dir.exist?
  dir.children.select(&:directory?)
end
remove_dir(path) click to toggle source
# File lib/cocoapods/installer/sandbox_dir_cleaner.rb, line 100
def remove_dir(path)
  FileUtils.rm_rf(path)
end
sandbox_private_headers(pod_targets) click to toggle source
# File lib/cocoapods/installer/sandbox_dir_cleaner.rb, line 83
def sandbox_private_headers(pod_targets)
  pod_targets.flat_map { |pod_target| child_directories_of(pod_target.build_headers.root) }.uniq
end
sandbox_project_dir_names() click to toggle source
# File lib/cocoapods/installer/sandbox_dir_cleaner.rb, line 87
def sandbox_project_dir_names
  child_directories_of(sandbox.root).select { |d| d.extname == '.xcodeproj' }
end
sandbox_public_headers() click to toggle source
# File lib/cocoapods/installer/sandbox_dir_cleaner.rb, line 91
def sandbox_public_headers
  child_directories_of(sandbox.public_headers.root)
end
sandbox_target_support_dirs() click to toggle source
# File lib/cocoapods/installer/sandbox_dir_cleaner.rb, line 79
def sandbox_target_support_dirs
  child_directories_of(sandbox.target_support_files_root)
end