diff options
author | Bundlerbot <bot@bundler.io> | 2019-02-20 07:14:53 +0000 |
---|---|---|
committer | Bundlerbot <bot@bundler.io> | 2019-02-20 07:14:53 +0000 |
commit | 98a0a2dfdd42d9f624682915ab27fe1d4319def8 (patch) | |
tree | 47f063e3d75d471f724c5d2dc93432e970bf3795 | |
parent | 5dc368b07c407702a485ed53d8fd8a8ab40fa9ef (diff) | |
parent | c5396b64b5d83eb0ffdda357bb3e3efb46c5d1c8 (diff) | |
download | bundler-98a0a2dfdd42d9f624682915ab27fe1d4319def8.tar.gz |
Merge #6973
6973: Backport the latest commits on ruby core repository. r=hsbt a=hsbt
### What was the end-user problem that led to this PR?
RSpec example of the bundled bundler was failed on Ruby 2.7 from ruby core repository. I fixed some of the issues on ruby core repository.
### What was your diagnosis of the problem?
1. I fixed the location of `lib/bundler.gemspec` to `lib/bundler/bundler.gemspec` for fixing gemspec issue of Ruby 2.6.1: https://github.com/ruby/ruby/commit/7c9771be02ddc707fea8ec96089c8a100c59f806
2. The current Bundler examples relied on the same versions of Ruby that are the first binary of PATH and rspec invocation binary. But the ruby core repository uses the different versions for them.
### What is your fix for the problem, implemented in this PR?
I fixed the location path of bundler.gemspec and uses `ENV['BUNDLE_GEM']` instead of hard-coded `gem` command.
### Why did you choose this fix out of the possible options?
There is no options on ruby core repository. I welcome to another options.
Co-authored-by: SHIBATA Hiroshi <hsbt@ruby-lang.org>
-rw-r--r-- | lib/bundler/gem_helper.rb | 6 | ||||
-rw-r--r-- | lib/bundler/shared_helpers.rb | 2 | ||||
-rw-r--r-- | spec/commands/clean_spec.rb | 12 | ||||
-rw-r--r-- | spec/quality_spec.rb | 14 | ||||
-rw-r--r-- | spec/runtime/setup_spec.rb | 2 | ||||
-rw-r--r-- | spec/support/helpers.rb | 12 | ||||
-rw-r--r-- | spec/support/rubygems_ext.rb | 3 |
7 files changed, 35 insertions, 16 deletions
diff --git a/lib/bundler/gem_helper.rb b/lib/bundler/gem_helper.rb index ca39f122e9..e9ee03b8a2 100644 --- a/lib/bundler/gem_helper.rb +++ b/lib/bundler/gem_helper.rb @@ -75,7 +75,8 @@ module Bundler def build_gem file_name = nil - sh(%W[gem build -V #{spec_path}]) do + gem = ENV["BUNDLE_GEM"] ? ENV["BUNDLE_GEM"] : "gem" + sh(%W[#{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") @@ -86,7 +87,8 @@ module Bundler def install_gem(built_gem_path = nil, local = false) built_gem_path ||= build_gem - cmd = %W[gem install #{built_gem_path}] + gem = ENV["BUNDLE_GEM"] ? ENV["BUNDLE_GEM"] : "gem" + cmd = %W[#{gem} install #{built_gem_path}] cmd << "--local" if local out, status = sh_with_status(cmd) unless status.success? && out[/Successfully installed/] diff --git a/lib/bundler/shared_helpers.rb b/lib/bundler/shared_helpers.rb index 6a0da52e1e..02b3801c44 100644 --- a/lib/bundler/shared_helpers.rb +++ b/lib/bundler/shared_helpers.rb @@ -278,7 +278,7 @@ module Bundler # 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 2ed8b36a85..f9c76fdfd0 100644 --- a/spec/commands/clean_spec.rb +++ b/spec/commands/clean_spec.rb @@ -339,7 +339,8 @@ RSpec.describe "bundle clean" do 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 @@ RSpec.describe "bundle clean" do 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 @@ RSpec.describe "bundle clean" do 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 @@ RSpec.describe "bundle clean" do expect(err).to include(system_gem_path.to_s) expect(err).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 f800ceeebd..cbeabb3b6e 100644 --- a/spec/quality_spec.rb +++ b/spec/quality_spec.rb @@ -216,7 +216,16 @@ RSpec.describe "The library itself" do 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 around this warning last_command.stderr.sub!(/^YAML safe loading.*/, "") @@ -227,8 +236,7 @@ RSpec.describe "The library itself" do 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 b57d61c3a6..fe84fc5379 100644 --- a/spec/runtime/setup_spec.rb +++ b/spec/runtime/setup_spec.rb @@ -871,7 +871,7 @@ end 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 563af1eab3..e9138728fc 100644 --- a/spec/support/helpers.rb +++ b/spec/support/helpers.rb @@ -308,12 +308,16 @@ module Spec 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 c13ed35413..478cd12eb5 100644 --- a/spec/support/rubygems_ext.rb +++ b/spec/support/rubygems_ext.rb @@ -52,7 +52,8 @@ module Spec no_reqs.map!(&:first) reqs.map! {|name, req| "'#{name}:#{req}'" } deps = reqs.concat(no_reqs).join(" ") - cmd = "#{Gem.ruby} -S gem install #{deps} --no-document --conservative" + gem = Spec::Path.ruby_core? ? ENV["BUNDLE_GEM"] : "#{Gem.ruby} -S gem" + cmd = "#{gem} install #{deps} --no-document --conservative" puts cmd system(cmd) || raise("Installing gems #{deps} for the tests to use failed!") end |