Skip to content
This repository has been archived by the owner on Apr 14, 2021. It is now read-only.

Commit

Permalink
Merge #7248
Browse files Browse the repository at this point in the history
7248: Fix nested bundle exec's when bundler is a default gem r=deivid-rodriguez a=MSP-Greg

### What was the end-user problem that led to this PR?

The problem was that when bundler is a default gem, nested `bundle exec` commands generate a LoadError.

```
/home/travis/.rvm/rubies/ruby-head/bin/bundle:30:in `load': cannot load such file --
/home/travis/.rvm/rubies/ruby-head/lib/bin/bundle (LoadError)
```

### What was your diagnosis of the problem?

Not accounting for Bundler being installed as a default gem. When it's a default, the lib and exe folders do not share the same root folder.

This was the result of a change in e742c3d (#7100).

### Repo Example

Using Ruby master/trunk/ruby-head (as of ruby/ruby@0c6c937), from a folder where `bundle exec` can be ran:

```
bundle exec "bundle exec 'ruby -v'"
```

### What is your fix for the problem, implemented in this PR?

Small adjustment to logic for finding the correct exe/bundle file.

### Why did you choose this fix out of the possible options?

I chose this fix because it's similar to previous code.

Fixes #7244.

Co-authored-by: MSP-Greg <msp-greg@users.noreply.github.com>
  • Loading branch information
bundlerbot and MSP-Greg committed Jul 19, 2019
2 parents 36ce7cc + 537c0ab commit 3f57b10
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 4 deletions.
10 changes: 8 additions & 2 deletions lib/bundler/shared_helpers.rb
Expand Up @@ -285,9 +285,15 @@ def set_env(key, value)
public :set_env

def set_bundle_variables
# bundler exe & lib folders have same root folder, typical gem installation
exe_file = File.expand_path("../../../exe/bundle", __FILE__)
# for Ruby core repository
exe_file = File.expand_path("../../../../bin/bundle", __FILE__) unless File.exist?(exe_file)

# for Ruby core repository testing
exe_file = File.expand_path("../../../bin/bundle", __FILE__) unless File.exist?(exe_file)

# bundler is a default gem, exe path is separate
exe_file = Bundler.rubygems.bin_path("bundler", "bundle", VERSION) unless File.exist?(exe_file)

Bundler::SharedHelpers.set_env "BUNDLE_BIN_PATH", exe_file
Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", find_gemfile.to_s
Bundler::SharedHelpers.set_env "BUNDLER_VERSION", Bundler::VERSION
Expand Down
6 changes: 4 additions & 2 deletions spec/bundler/shared_helpers_spec.rb
Expand Up @@ -402,8 +402,10 @@

it "sets BUNDLE_BIN_PATH to the bundle executable file" do
subject.set_bundle_environment
bundle_exe = ruby_core? ? "../../../../../bin/bundle" : "../../../exe/bundle"
expect(ENV["BUNDLE_BIN_PATH"]).to eq(File.expand_path(bundle_exe, __FILE__))
bundle_exe = ruby_core? ? "../../../bin/bundle" : "../../../exe/bundle"
bin_path = ENV["BUNDLE_BIN_PATH"]
expect(bin_path).to eq(File.expand_path(bundle_exe, __FILE__))
expect(File.exist?(bin_path)).to be true
end
end

Expand Down

0 comments on commit 3f57b10

Please sign in to comment.