[rubygems/rubygems] If GEM_HOME exists + isn't writable, use --user-install.

https://github.com/rubygems/rubygems/commit/6d20585645
This commit is contained in:
Ellen Marie Dash 2022-01-31 23:20:58 -05:00 committed by git
parent 9af5abd23a
commit 7aebe2a52b
2 changed files with 43 additions and 1 deletions

View File

@ -185,9 +185,24 @@ module Gem::InstallUpdateOptions
# Default options for the gem install and update commands.
def install_update_options
{
default_options = {
:document => %w[ri],
}
# If Gem.paths.home exists, but we can't write to it,
# fall back to a user installation.
if File.exist?(Gem.paths.home) && !File.writable?(Gem.paths.home)
default_options[:user_install] = true
alert_warning "The default GEM_HOME (#{Gem.paths.home}) is not" \
" writable, so rubygems is falling back to installing" \
" under your home folder. To get rid of this warning" \
" permanently either fix your GEM_HOME folder permissions" \
" or add the following to your ~/.gemrc file:\n" \
" gem: --user-install"
end
default_options
end
##

View File

@ -159,6 +159,33 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
FileUtils.chmod 0o755, @gemhome
end
def test_auto_user_install_unless_gem_home_writable
if Process.uid.zero?
pend("test_auto_user_install_unless_gem_home_writable test skipped in root privilege")
return
end
@spec = quick_gem "a" do |spec|
util_make_exec spec
end
util_build_gem @spec
@gem = @spec.cache_file
@cmd.handle_options %w[]
refute @cmd.options[:user_install]
FileUtils.chmod 0755, @userhome
FileUtils.chmod 0000, @gemhome
Gem.use_paths @gemhome, @userhome
@cmd.install_update_options.include?(:user_install)
ensure
FileUtils.chmod 0755, @gemhome
end
def test_vendor
vendordir(File.join(@tempdir, "vendor")) do
@cmd.handle_options %w[--vendor]