[rubygems/rubygems] Make --build-root disable auto-user-install.

https://github.com/rubygems/rubygems/commit/6a06b0763f
This commit is contained in:
Ellen Marie Dash 2023-11-30 20:20:38 -05:00 committed by Hiroshi SHIBATA
parent 33bd956257
commit 7d32830b8c
2 changed files with 30 additions and 8 deletions

View File

@ -675,14 +675,16 @@ class Gem::Installer
@build_args = options[:build_args]
@gem_home = @install_dir
@gem_home ||= if options[:user_install]
Gem.user_dir
elsif !ENV.key?("GEM_HOME") && (File.exist?(Gem.dir) && !File.writable?(Gem.dir))
say "Defaulting to user installation because default installation directory (#{Gem.dir}) is not writable."
Gem.user_dir
else
Gem.dir
@gem_home = @install_dir || Gem.dir
# `--build-root` overrides `--user-install` and auto-user-install
if @build_root.nil? && @install_dir.nil?
if options[:user_install]
@gem_home = Gem.user_dir
elsif !ENV.key?("GEM_HOME") && (File.exist?(Gem.dir) && !File.writable?(Gem.dir))
say "Defaulting to user installation because default installation directory (#{Gem.dir}) is not writable."
@gem_home = Gem.user_dir
end
end
# If the user has asked for the gem to be installed in a directory that is

View File

@ -1285,6 +1285,26 @@ end
assert_equal @spec, installer.install
end
def test_install_build_root_when_gem_home_not_writable_does_not_fallback_to_user_install_inside_build_root
build_root = File.join(@tempdir, "build_root")
orig_gem_home = ENV.delete("GEM_HOME")
@gem = setup_base_gem
FileUtils.chmod "-w", @gemhome
installer = Gem::Installer.at @gem, :build_root => build_root
assert_equal @spec, installer.install
build_root_path = File.join(build_root, @gemhome.gsub(/^[a-zA-Z]:/, ""))
assert File.exist?(build_root_path), "gem not written to build_root"
ensure
FileUtils.chmod "+w", @gemhome
ENV["GEM_HOME"] = orig_gem_home
end
def test_install_missing_dirs
installer = setup_base_installer