From 03246719ccb2a9c042487b59b31bcac8c30bbff1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= Date: Fri, 26 May 2023 21:56:17 +0200 Subject: [PATCH] [rubygems/rubygems] Fix `path` vs `deployment` precedence when path set through ENV The `deployment` setting sets `path` to `vendor/bundle` implicitly, but that should only apply if `path` is not set explicitly, at any level. https://github.com/rubygems/rubygems/commit/3552c064c1 --- lib/bundler/settings.rb | 5 +++-- spec/bundler/install/deploy_spec.rb | 6 ++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/bundler/settings.rb b/lib/bundler/settings.rb index 88dd829d66..b424bcfd52 100644 --- a/lib/bundler/settings.rb +++ b/lib/bundler/settings.rb @@ -219,7 +219,6 @@ module Bundler def path configs.each do |_level, settings| path = value_for("path", settings) - path = "vendor/bundle" if value_for("deployment", settings) && path.nil? path_system = value_for("path.system", settings) disabled_shared_gems = value_for("disable_shared_gems", settings) next if path.nil? && path_system.nil? && disabled_shared_gems.nil? @@ -227,7 +226,9 @@ module Bundler return Path.new(path, system_path) end - Path.new(nil, false) + path = "vendor/bundle" if self[:deployment] + + Path.new(path, false) end Path = Struct.new(:explicit_path, :system_path) do diff --git a/spec/bundler/install/deploy_spec.rb b/spec/bundler/install/deploy_spec.rb index fb97e5c34c..3f98d56f41 100644 --- a/spec/bundler/install/deploy_spec.rb +++ b/spec/bundler/install/deploy_spec.rb @@ -248,6 +248,12 @@ RSpec.describe "install in deployment or frozen mode" do expect(out).to include("vendor/bundle2") end + it "installs gems to custom path if specified, even when configured through ENV" do + bundle "config set deployment true" + bundle "install", :env => { "BUNDLE_PATH" => "vendor/bundle2" } + expect(out).to include("vendor/bundle2") + end + it "works with the `frozen` setting" do bundle "config set frozen true" bundle "install"