зеркало из https://github.com/github/ruby.git
[rubygems/rubygems] Fix error when Bundler installation is corrupted
If one upgrades the default copy of Bundler through `gem update --system`, and then reinstalls Ruby without removing the previous copy. Then the new installation will have a correct default bundler gemspec, but a higher copy installed in site_dir. This causes a crash when running Bundler and prints the bug report template. This could probably be fixed in Ruby install script, by removing any previous Bundler default copies, but if the problem is already there, I think it's best to print a proper user error. https://github.com/rubygems/rubygems/commit/ada6de765d
This commit is contained in:
Родитель
69c87619bd
Коммит
899568cce9
|
@ -230,4 +230,18 @@ module Bundler
|
|||
|
||||
status_code(38)
|
||||
end
|
||||
|
||||
class CorruptBundlerInstallError < BundlerError
|
||||
def initialize(loaded_spec)
|
||||
@loaded_spec = loaded_spec
|
||||
end
|
||||
|
||||
def message
|
||||
"The running version of Bundler (#{Bundler::VERSION}) does not match the version of the specification installed for it (#{@loaded_spec.version}). " \
|
||||
"This can be caused by reinstalling Ruby without removing previous installation, leaving around an upgraded default version of Bundler. " \
|
||||
"Reinstalling Ruby from scratch should fix the problem."
|
||||
end
|
||||
|
||||
status_code(39)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -11,6 +11,8 @@ module Bundler
|
|||
end
|
||||
|
||||
if local_spec = Gem.loaded_specs["bundler"]
|
||||
raise CorruptBundlerInstallError.new(local_spec) if local_spec.version.to_s != Bundler::VERSION
|
||||
|
||||
idx << local_spec
|
||||
else
|
||||
idx << Gem::Specification.new do |s|
|
||||
|
|
|
@ -1407,4 +1407,33 @@ RSpec.describe "bundle install with gem sources" do
|
|||
expect(bundled_app(".bundle/config")).not_to exist
|
||||
end
|
||||
end
|
||||
|
||||
context "when bundler installation is corrupt" do
|
||||
before do
|
||||
system_gems "bundler-9.99.8"
|
||||
|
||||
replace_version_file("9.99.9", dir: system_gem_path("gems/bundler-9.99.8"))
|
||||
end
|
||||
|
||||
it "shows a proper error" do
|
||||
lockfile <<~L
|
||||
GEM
|
||||
remote: #{file_uri_for(gem_repo1)}/
|
||||
specs:
|
||||
|
||||
PLATFORMS
|
||||
#{lockfile_platforms}
|
||||
|
||||
DEPENDENCIES
|
||||
|
||||
BUNDLED WITH
|
||||
9.99.8
|
||||
L
|
||||
|
||||
install_gemfile "source \"#{file_uri_for(gem_repo1)}\"", env: { "BUNDLER_VERSION" => "9.99.8" }, raise_on_error: false
|
||||
|
||||
expect(err).not_to include("ERROR REPORT TEMPLATE")
|
||||
expect(err).to include("The running version of Bundler (9.99.9) does not match the version of the specification installed for it (9.99.8)")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Загрузка…
Ссылка в новой задаче