[rubygems/rubygems] Allow bundle pristine to run in parallel
Also fix running when BUNDLE_NO_INSTALL happens to be set, same as with install/update commands https://github.com/rubygems/rubygems/commit/a555fd6ccd
This commit is contained in:
parent
305f66b859
commit
e223dde329
@ -660,7 +660,9 @@ module Bundler
|
|||||||
D
|
D
|
||||||
def pristine(*gems)
|
def pristine(*gems)
|
||||||
require_relative "cli/pristine"
|
require_relative "cli/pristine"
|
||||||
Pristine.new(gems).run
|
Bundler.settings.temporary(no_install: false) do
|
||||||
|
Pristine.new(gems).run
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if Bundler.feature_flag.plugins?
|
if Bundler.feature_flag.plugins?
|
||||||
|
@ -12,40 +12,48 @@ module Bundler
|
|||||||
definition.validate_runtime!
|
definition.validate_runtime!
|
||||||
installer = Bundler::Installer.new(Bundler.root, definition)
|
installer = Bundler::Installer.new(Bundler.root, definition)
|
||||||
|
|
||||||
Bundler.load.specs.each do |spec|
|
ProcessLock.lock do
|
||||||
next if spec.name == "bundler" # Source::Rubygems doesn't install bundler
|
installed_specs = definition.specs.reject do |spec|
|
||||||
next if !@gems.empty? && !@gems.include?(spec.name)
|
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.name} (#{spec.version}#{spec.git_version})"
|
||||||
gem_name += " (#{spec.platform})" if !spec.platform.nil? && spec.platform != Gem::Platform::RUBY
|
gem_name += " (#{spec.platform})" if !spec.platform.nil? && spec.platform != Gem::Platform::RUBY
|
||||||
|
|
||||||
case source = spec.source
|
case source = spec.source
|
||||||
when Source::Rubygems
|
when Source::Rubygems
|
||||||
cached_gem = spec.cache_file
|
cached_gem = spec.cache_file
|
||||||
unless File.exist?(cached_gem)
|
unless File.exist?(cached_gem)
|
||||||
Bundler.ui.error("Failed to pristine #{gem_name}. Cached gem #{cached_gem} does not exist.")
|
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
|
next
|
||||||
end
|
end
|
||||||
|
|
||||||
FileUtils.rm_rf spec.full_gem_path
|
true
|
||||||
when Source::Git
|
end.map(&:name)
|
||||||
if source.local?
|
|
||||||
Bundler.ui.warn("Cannot pristine #{gem_name}. Gem is locally overridden.")
|
|
||||||
next
|
|
||||||
end
|
|
||||||
|
|
||||||
source.remote!
|
jobs = installer.send(:installation_parallelization, {})
|
||||||
if extension_cache_path = source.extension_cache_path(spec)
|
pristine_count = definition.specs.count - installed_specs.count
|
||||||
FileUtils.rm_rf extension_cache_path
|
# allow a pristining a single gem to skip the parallel worker
|
||||||
end
|
jobs = [jobs, pristine_count].min
|
||||||
FileUtils.rm_rf spec.extension_dir
|
ParallelInstaller.call(installer, definition.specs, jobs, false, true, skip: installed_specs)
|
||||||
FileUtils.rm_rf spec.full_gem_path
|
|
||||||
else
|
|
||||||
Bundler.ui.warn("Cannot pristine #{gem_name}. Gem is sourced from local path.")
|
|
||||||
next
|
|
||||||
end
|
|
||||||
|
|
||||||
Bundler::GemInstaller.new(spec, installer, false, 0, true).install_from_spec
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -62,20 +62,23 @@ module Bundler
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.call(*args)
|
def self.call(*args, **kwargs)
|
||||||
new(*args).call
|
new(*args, **kwargs).call
|
||||||
end
|
end
|
||||||
|
|
||||||
attr_reader :size
|
attr_reader :size
|
||||||
|
|
||||||
def initialize(installer, all_specs, size, standalone, force)
|
def initialize(installer, all_specs, size, standalone, force, skip: nil)
|
||||||
@installer = installer
|
@installer = installer
|
||||||
@size = size
|
@size = size
|
||||||
@standalone = standalone
|
@standalone = standalone
|
||||||
@force = force
|
@force = force
|
||||||
@specs = all_specs.map {|s| SpecInstallation.new(s) }
|
@specs = all_specs.map {|s| SpecInstallation.new(s) }
|
||||||
|
@specs.each do |spec_install|
|
||||||
|
spec_install.state = :installed if skip.include?(spec_install.name)
|
||||||
|
end if skip
|
||||||
@spec_set = all_specs
|
@spec_set = all_specs
|
||||||
@rake = @specs.find {|s| s.name == "rake" }
|
@rake = @specs.find {|s| s.name == "rake" unless s.installed? }
|
||||||
end
|
end
|
||||||
|
|
||||||
def call
|
def call
|
||||||
|
Loading…
x
Reference in New Issue
Block a user