[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,8 +660,10 @@ module Bundler
|
||||
D
|
||||
def pristine(*gems)
|
||||
require_relative "cli/pristine"
|
||||
Bundler.settings.temporary(no_install: false) do
|
||||
Pristine.new(gems).run
|
||||
end
|
||||
end
|
||||
|
||||
if Bundler.feature_flag.plugins?
|
||||
require_relative "cli/plugin"
|
||||
|
@ -12,7 +12,8 @@ module Bundler
|
||||
definition.validate_runtime!
|
||||
installer = Bundler::Installer.new(Bundler.root, definition)
|
||||
|
||||
Bundler.load.specs.each do |spec|
|
||||
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)
|
||||
|
||||
@ -45,7 +46,14 @@ module Bundler
|
||||
next
|
||||
end
|
||||
|
||||
Bundler::GemInstaller.new(spec, installer, false, 0, true).install_from_spec
|
||||
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
|
||||
end
|
||||
|
@ -62,20 +62,23 @@ module Bundler
|
||||
end
|
||||
end
|
||||
|
||||
def self.call(*args)
|
||||
new(*args).call
|
||||
def self.call(*args, **kwargs)
|
||||
new(*args, **kwargs).call
|
||||
end
|
||||
|
||||
attr_reader :size
|
||||
|
||||
def initialize(installer, all_specs, size, standalone, force)
|
||||
def initialize(installer, all_specs, size, standalone, force, skip: nil)
|
||||
@installer = installer
|
||||
@size = size
|
||||
@standalone = standalone
|
||||
@force = force
|
||||
@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
|
||||
@rake = @specs.find {|s| s.name == "rake" }
|
||||
@rake = @specs.find {|s| s.name == "rake" unless s.installed? }
|
||||
end
|
||||
|
||||
def call
|
||||
|
Loading…
x
Reference in New Issue
Block a user