1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

[rubygems/rubygems] Show a proper error if gem path is not writable

Instead of showing the bug report place with an error at a randome
place.

https://github.com/rubygems/rubygems/commit/241854ce73
This commit is contained in:
David Rodriguez 2021-10-14 12:03:51 +02:00 committed by Hiroshi SHIBATA
parent f6d1909500
commit 00412be204
No known key found for this signature in database
GPG key ID: F9CF13417264FAC2
3 changed files with 47 additions and 3 deletions

View file

@ -75,10 +75,22 @@ module Bundler
end
end
def permission_type
case @permission_type
when :create
"executable permissions for all parent directories and write permissions for `#{parent_folder}`"
else
"#{@permission_type} permissions for that path"
end
end
def parent_folder
File.dirname(@path)
end
def message
"There was an error while trying to #{action} `#{@path}`. " \
"It is likely that you need to grant #{@permission_type} permissions " \
"for that path."
"It is likely that you need to grant #{permission_type}."
end
status_code(23)

View file

@ -19,7 +19,9 @@ module Bundler
FileUtils.rm_rf gem_dir
FileUtils.rm_rf spec.extension_dir
FileUtils.mkdir_p gem_dir, :mode => 0o755
SharedHelpers.filesystem_access(gem_dir, :create) do
FileUtils.mkdir_p gem_dir, :mode => 0o755
end
extract_files

View file

@ -678,6 +678,36 @@ RSpec.describe "bundle install with gem sources" do
end
end
describe "when bundle gems path does not have write access", :permissions do
let(:gems_path) { bundled_app("vendor/#{Bundler.ruby_scope}/gems") }
before do
FileUtils.mkdir_p(gems_path)
gemfile <<-G
source "#{file_uri_for(gem_repo1)}"
gem 'rack'
G
end
it "should display a proper message to explain the problem" do
FileUtils.chmod("-x", gems_path)
bundle "config set --local path vendor"
begin
bundle :install, :raise_on_error => false
ensure
FileUtils.chmod("+x", gems_path)
end
expect(err).not_to include("ERROR REPORT TEMPLATE")
expect(err).to include(
"There was an error while trying to create `#{gems_path.join("rack-1.0.0")}`. " \
"It is likely that you need to grant executable permissions for all parent directories and write permissions for `#{gems_path}`."
)
end
end
describe "when bundle cache path does not have write access", :permissions do
let(:cache_path) { bundled_app("vendor/#{Bundler.ruby_scope}/cache") }