summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZehan Zhao <cnallenzhao@gmail.com>2016-08-15 22:44:19 +0800
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2019-08-18 13:44:26 +0900
commitd80f5399adc3564d05339e6dff92ea1e95fb280a (patch)
treea8e734c158d39cf9481107b2145b55c55724c366
parent98841b2b19fc2d5c6aacda26019ff07d48d971ec (diff)
downloadruby-d80f5399adc3564d05339e6dff92ea1e95fb280a.tar.gz
[bundler/bundler] Fix open default gem error
https://github.com/bundler/bundler/commit/792d724752
-rw-r--r--lib/bundler/cli/open.rb14
-rw-r--r--spec/bundler/commands/open_spec.rb13
2 files changed, 22 insertions, 5 deletions
diff --git a/lib/bundler/cli/open.rb b/lib/bundler/cli/open.rb
index 552fe6f128..008cf711e9 100644
--- a/lib/bundler/cli/open.rb
+++ b/lib/bundler/cli/open.rb
@@ -15,11 +15,15 @@ module Bundler
return Bundler.ui.info("To open a bundled gem, set $EDITOR or $BUNDLER_EDITOR") unless editor
return unless spec = Bundler::CLI::Common.select_spec(name, :regex_match)
path = spec.full_gem_path
- Dir.chdir(path) do
- command = Shellwords.split(editor) + [path]
- Bundler.with_original_env do
- system(*command)
- end || Bundler.ui.info("Could not run '#{command.join(" ")}'")
+ if spec.default_gem?
+ Bundler.ui.info "Unable to open #{name} because it's a default gem, so the directory it would normally be installed to does not exist."
+ else
+ Dir.chdir(path) do
+ command = Shellwords.split(editor) + [path]
+ Bundler.with_original_env do
+ system(*command)
+ end || Bundler.ui.info("Could not run '#{command.join(" ")}'")
+ end
end
end
end
diff --git a/spec/bundler/commands/open_spec.rb b/spec/bundler/commands/open_spec.rb
index 51af34a875..649ae06fda 100644
--- a/spec/bundler/commands/open_spec.rb
+++ b/spec/bundler/commands/open_spec.rb
@@ -91,4 +91,17 @@ RSpec.describe "bundle open" do
expect(out).not_to include("BUNDLE_GEMFILE=")
end
end
+
+ context "when opening a default gem" do
+ before do
+ install_gemfile <<-G
+ gem "json"
+ G
+ end
+
+ it "throws proper error when trying to open default gem" do
+ bundle "open json", :env => { "EDITOR" => "echo editor", "VISUAL" => "echo visual", "BUNDLER_EDITOR" => "echo bundler_editor" }
+ expect(out).to include("Unable to open json because it's a default gem, so the directory it would normally be installed to does not exist.")
+ end
+ end
end