Class: Bundler::CLI::Pristine
- Inherits:
-
Object
- Object
- Bundler::CLI::Pristine
- Defined in:
- lib/bundler/cli/pristine.rb
Instance Method Summary collapse
-
#initialize(gems) ⇒ Pristine
constructor
A new instance of Pristine.
- #run ⇒ Object
Constructor Details
#initialize(gems) ⇒ Pristine
Returns a new instance of Pristine.
5 6 7 |
# File 'lib/bundler/cli/pristine.rb', line 5 def initialize(gems) @gems = gems end |
Instance Method Details
#run ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/bundler/cli/pristine.rb', line 9 def run CLI::Common.ensure_all_gems_in_lockfile!(@gems) definition = Bundler.definition definition.validate_runtime! installer = Bundler::Installer.new(Bundler.root, definition) ProcessLock.lock do installed_specs = definition.specs.reject do |spec| next if spec.name == "bundler" # Source::Rubygems doesn't install bundler next if !@gems.empty? && !@gems.include?(spec.name) gem_name = "#{spec.name} (#{spec.version}#{spec.git_version})" gem_name += " (#{spec.platform})" if !spec.platform.nil? && spec.platform != Gem::Platform::RUBY case source = spec.source when Source::Rubygems cached_gem = spec.cache_file unless File.exist?(cached_gem) Bundler.ui.error("Failed to pristine #{gem_name}. Cached gem #{cached_gem} does not exist.") next end FileUtils.rm_rf spec.full_gem_path when Source::Git if source.local? Bundler.ui.warn("Cannot pristine #{gem_name}. Gem is locally overridden.") next end source.remote! if extension_cache_path = source.extension_cache_path(spec) FileUtils.rm_rf extension_cache_path end FileUtils.rm_rf spec.extension_dir FileUtils.rm_rf spec.full_gem_path else Bundler.ui.warn("Cannot pristine #{gem_name}. Gem is sourced from local path.") next end true end.map(&:name) jobs = installer.send(:installation_parallelization, {}) pristine_count = definition.specs.count - installed_specs.count # allow a pristining a single gem to skip the parallel worker jobs = [jobs, pristine_count].min ParallelInstaller.call(installer, definition.specs, jobs, false, true, skip: installed_specs) end end |