diff --git a/lib/bundler/gem_helper.rb b/lib/bundler/gem_helper.rb index e7673cba883..55f484f723d 100644 --- a/lib/bundler/gem_helper.rb +++ b/lib/bundler/gem_helper.rb @@ -74,7 +74,8 @@ def install def build_gem file_name = nil - sh("gem build -V '#{spec_path}'") do + gem = ENV["BUNDLE_GEM"] ? ENV["BUNDLE_GEM"] : "gem" + sh("#{gem} build -V '#{spec_path}'") do file_name = File.basename(built_gem_path) SharedHelpers.filesystem_access(File.join(base, "pkg")) {|p| FileUtils.mkdir_p(p) } FileUtils.mv(built_gem_path, "pkg") @@ -85,7 +86,8 @@ def build_gem def install_gem(built_gem_path = nil, local = false) built_gem_path ||= build_gem - out, _ = sh_with_code("gem install '#{built_gem_path}'#{" --local" if local}") + gem = ENV["BUNDLE_GEM"] ? ENV["BUNDLE_GEM"] : "gem" + out, _ = sh_with_code("#{gem} install '#{built_gem_path}'#{" --local" if local}") raise "Couldn't install gem, run `gem install #{built_gem_path}' for more detailed output" unless out[/Successfully installed/] Bundler.ui.confirm "#{name} (#{version}) installed." end diff --git a/lib/bundler/shared_helpers.rb b/lib/bundler/shared_helpers.rb index d58ccb77232..ff9a3282cba 100644 --- a/lib/bundler/shared_helpers.rb +++ b/lib/bundler/shared_helpers.rb @@ -277,7 +277,7 @@ def search_up(*names) # avoid stepping above the tmp directory when testing gemspec = if ENV["BUNDLE_RUBY"] && ENV["BUNDLE_GEM"] # for Ruby Core - "lib/bundler.gemspec" + "lib/bundler/bundler.gemspec" else "bundler.gemspec" end diff --git a/spec/commands/clean_spec.rb b/spec/commands/clean_spec.rb index 37cbeeb4e7c..0d1efd2f3df 100644 --- a/spec/commands/clean_spec.rb +++ b/spec/commands/clean_spec.rb @@ -339,7 +339,8 @@ def should_not_have_gems(*gems) gem "rack" G - sys_exec! "gem list" + gem = ruby_core? ? ENV["BUNDLE_GEM"] : "gem" + sys_exec! "#{gem} list" expect(out).to include("rack (1.0.0)").and include("thin (1.0)") end @@ -461,7 +462,8 @@ def should_not_have_gems(*gems) end bundle! :update, :all => bundle_update_requires_all? - sys_exec! "gem list" + gem = ruby_core? ? ENV["BUNDLE_GEM"] : "gem" + sys_exec! "#{gem} list" expect(out).to include("foo (1.0.1, 1.0)") end @@ -485,7 +487,8 @@ def should_not_have_gems(*gems) bundle "clean --force" expect(out).to include("Removing foo (1.0)") - sys_exec "gem list" + gem = ruby_core? ? ENV["BUNDLE_GEM"] : "gem" + sys_exec "#{gem} list" expect(out).not_to include("foo (1.0)") expect(out).to include("rack (1.0.0)") end @@ -519,7 +522,8 @@ def should_not_have_gems(*gems) expect(out).to include(system_gem_path.to_s) expect(out).to include("grant write permissions") - sys_exec "gem list" + gem = ruby_core? ? ENV["BUNDLE_GEM"] : "gem" + sys_exec "#{gem} list" expect(out).to include("foo (1.0)") expect(out).to include("rack (1.0.0)") end diff --git a/spec/quality_spec.rb b/spec/quality_spec.rb index 14d6bb99b95..3914646e3be 100644 --- a/spec/quality_spec.rb +++ b/spec/quality_spec.rb @@ -224,7 +224,16 @@ def check_for_specific_pronouns(filename) it "can still be built" do Dir.chdir(root) do begin - gem_command! :build, gemspec + if ruby_core? + spec = Gem::Specification.load(gemspec.to_s) + spec.bindir = "libexec" + File.open(root.join("bundler.gemspec").to_s, "w") {|f| f.write spec.to_ruby } + gem_command! :build, root.join("bundler.gemspec").to_s + FileUtils.rm(root.join("bundler.gemspec").to_s) + else + gem_command! :build, gemspec + end + if Bundler.rubygems.provides?(">= 2.4") # there's no way aroudn this warning last_command.stderr.sub!(/^YAML safe loading.*/, "") @@ -235,8 +244,7 @@ def check_for_specific_pronouns(filename) end ensure # clean up the .gem generated - path_prefix = ruby_core? ? "lib/" : "./" - FileUtils.rm("#{path_prefix}bundler-#{Bundler::VERSION}.gem") + FileUtils.rm("bundler-#{Bundler::VERSION}.gem") end end end diff --git a/spec/runtime/setup_spec.rb b/spec/runtime/setup_spec.rb index 646227d931a..ce355989b96 100644 --- a/spec/runtime/setup_spec.rb +++ b/spec/runtime/setup_spec.rb @@ -876,7 +876,7 @@ def clean_load_path(lp) FileUtils.ln_s(bundler_dir, File.join(gems_dir, "bundler-#{Bundler::VERSION}")) - gemspec_file = ruby_core? ? "#{bundler_dir}/lib/bundler.gemspec" : "#{bundler_dir}/bundler.gemspec" + gemspec_file = ruby_core? ? "#{bundler_dir}/lib/bundler/bundler.gemspec" : "#{bundler_dir}/bundler.gemspec" gemspec = File.read(gemspec_file). sub("Bundler::VERSION", %("#{Bundler::VERSION}")) gemspec = gemspec.lines.reject {|line| line =~ %r{lib/bundler/version} }.join diff --git a/spec/support/helpers.rb b/spec/support/helpers.rb index b027e7a922a..90b6013a814 100644 --- a/spec/support/helpers.rb +++ b/spec/support/helpers.rb @@ -313,12 +313,16 @@ def install_gems(*gems) gem_repo = options.fetch(:gem_repo) { gem_repo1 } gems.each do |g| path = if g == :bundler - Dir.chdir(root) { gem_command! :build, gemspec.to_s } - bundler_path = if ruby_core? - root + "lib/bundler-#{Bundler::VERSION}.gem" + if ruby_core? + spec = Gem::Specification.load(gemspec.to_s) + spec.bindir = "libexec" + File.open(root.join("bundler.gemspec").to_s, "w") {|f| f.write spec.to_ruby } + Dir.chdir(root) { gem_command! :build, root.join("bundler.gemspec").to_s } + FileUtils.rm(root.join("bundler.gemspec")) else - root + "bundler-#{Bundler::VERSION}.gem" + Dir.chdir(root) { gem_command! :build, gemspec.to_s } end + bundler_path = root + "bundler-#{Bundler::VERSION}.gem" elsif g.to_s =~ %r{\A/.*\.gem\z} g else diff --git a/spec/support/rubygems_ext.rb b/spec/support/rubygems_ext.rb index c18f7650fc3..063738c798e 100644 --- a/spec/support/rubygems_ext.rb +++ b/spec/support/rubygems_ext.rb @@ -59,10 +59,11 @@ def self.install_gems(gems) no_reqs.map!(&:first) reqs.map! {|name, req| "'#{name}:#{req}'" } deps = reqs.concat(no_reqs).join(" ") + gem = Spec::Path.ruby_core? ? ENV["BUNDLE_GEM"] : "#{Gem.ruby} -S gem" cmd = if Gem::VERSION < "2.0.0" - "gem install #{deps} --no-rdoc --no-ri --conservative" + "#{gem} install #{deps} --no-rdoc --no-ri --conservative" else - "gem install #{deps} --no-document --conservative" + "#{gem} install #{deps} --no-document --conservative" end puts cmd system(cmd) || raise("Installing gems #{deps} for the tests to use failed!")