зеркало из https://github.com/github/ruby.git
[rubygems/rubygems] Don't show bug report template when GEM_HOME has no writable bit
Instead, don't check that at all and proceed. If something fails to be written inside GEM_HOME, we'll eventually fail with a proper permissions error. In addition to that, the writable bit in GEM_HOME is not even reliable, because only the immediate parent is actually checked when writing. For example, ``` $ mkdir -p foo/bar $ chmod -w foo $ touch foo/bar/baz # writes without issue ``` https://github.com/rubygems/rubygems/commit/4bced7ac73
This commit is contained in:
Родитель
2d719cd146
Коммит
7f7a7f13ed
|
@ -45,6 +45,14 @@ module Bundler
|
|||
spec
|
||||
end
|
||||
|
||||
def pre_install_checks
|
||||
super
|
||||
rescue Gem::FilePermissionError
|
||||
# Ignore permission checks in RubyGems. Instead, go on, and try to write
|
||||
# for real. We properly handle permission errors when they happen.
|
||||
nil
|
||||
end
|
||||
|
||||
def generate_plugins
|
||||
return unless Gem::Installer.instance_methods(false).include?(:generate_plugins)
|
||||
|
||||
|
|
|
@ -792,6 +792,41 @@ RSpec.describe "bundle install with gem sources" do
|
|||
end
|
||||
end
|
||||
|
||||
describe "when gem home does not have the writable bit set, yet it's still writable", :permissions do
|
||||
let(:gem_home) { bundled_app("vendor/#{Bundler.ruby_scope}") }
|
||||
|
||||
before do
|
||||
build_repo4 do
|
||||
build_gem "foo", "1.0.0" do |s|
|
||||
s.write "CHANGELOG.md", "foo"
|
||||
end
|
||||
end
|
||||
|
||||
gemfile <<-G
|
||||
source "#{file_uri_for(gem_repo4)}"
|
||||
gem 'foo'
|
||||
G
|
||||
end
|
||||
|
||||
it "should display a proper message to explain the problem" do
|
||||
bundle "config set --local path vendor"
|
||||
bundle :install
|
||||
expect(out).to include("Bundle complete!")
|
||||
expect(err).to be_empty
|
||||
|
||||
FileUtils.chmod("-w", gem_home)
|
||||
|
||||
begin
|
||||
bundle "install --redownload"
|
||||
ensure
|
||||
FileUtils.chmod("+w", gem_home)
|
||||
end
|
||||
|
||||
expect(out).to include("Bundle complete!")
|
||||
expect(err).to be_empty
|
||||
end
|
||||
end
|
||||
|
||||
describe "when bundle cache path does not have write access", :permissions do
|
||||
let(:cache_path) { bundled_app("vendor/#{Bundler.ruby_scope}/cache") }
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче